2010-12-01 4 views

Respuesta

8

Basado en la dirección de David, resolví esto creando un inicializador "git_info.rb". Coloque este archivo en el directorio de sus rieles Inicializadores

El contenido de la git_info.rb son:

GIT_BRANCH = `git status | sed -n 1p`.split(" ").last 
GIT_COMMIT = `git log | sed -n 1p`.split(" ").last 

Luego, en el pie de página, puede utilizar esta salida (sintaxis HAML):

#rev_info 
    = "branch: #{GIT_BRANCH} | commit: #{GIT_COMMIT}" 

Es posible que desee establecer el color de la fuente de #rev_info de la misma manera que el color de fondo, de modo que el texto esté visible solo cuando lo resalte con el cursor.

Acabo de probar esto, y aunque funciona en modo de desarrollo, parece que la rama se sobreescribe con "implementar" la implementación post capistrano. ¿Capistrano debe crear su propia rama local llamada "implementación" en la implementación?

+1

Por defecto, agregamos 'set: copy_exclude," .git/* "' en nuestro capistano deploy.rb para mantener esos datos extra fuera del sitio. Entonces, mientras lo anterior funciona en desarrollo, no hay ningún repo de git para la producción. Sin embargo, capistrano (y heroku, por cierto) crean un archivo REVISION que se agrega a la implementación para que pueda usar la etiqueta SHA desde allí cuando eso exista. – jwadsack

+1

¿Por qué no utilizar 'git describe' en su lugar –

0
hace

largo vez que hice esto para subversión:
en un inicializador pongo un mundial

SVN_REVISION = `svn info | ruby -ne 'puts $1 if $_ =~ /^Revision: ([0-9]*)/'` 

y en el diseño de la aplicación:

<div id='site_footer'> 
    ... 
    <% unless SVN_REVISION.blank? -%> 
    <p id='version'> 
    v<%= SVN_REVISION %> 
    </p> 
    <% end -%> 
</div> 

con git usted podría cambiar el global a algo así como:

git log -1 | ruby -ne 'puts $1 if $_ =~ %r{^Date: (.+) \+\d+$}' 

Ahora pensar en ello, tal vez sea mejor:

  • Capistrano crea un archivo de configuración (config/git_status.yml)
  • los inicializadores trata analiza la configuración y establece variables

No estoy seguro, solo es una idea.

8

Para las personas que no utilizan Capistrano, uno más bonito:

En config/inicializadores/git_info.rb:

GIT_BRANCH = `git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3` 
GIT_COMMIT = `git log --pretty=format:'%h' -n 1` 
GIT_COMMIT_TIMESTAMP = `git log --pretty=format:'%ct' -n 1` 

El segundo da el sha en forma más bonita (por ejemplo: 4df21c0)

El tercero devuelve el UNIX TIMESTAMP, que formateo usando Time/DateTime más tarde.

2

A menudo no se despliegan en un repositorio git, pero en una versión que no contiene ninguna información del repositorio:

Capistrano almacena un archivo de revisión con cada una implementación exitosa, que es el git commit sha.Este archivo se llama REVISION y se puede encontrar en la raíz del directorio de despliegue.

En config/inicializadores de su aplicación Rails, crear un archivo: deploy_version.rb con algo como:

if File.exists?('REVISION') 
    APP_REVISION = `cat REVISION` 
else 
    APP_REVISION = 'unknown' 
end 

O si seguro de que fuera de despliegue siempre hay un repositorio Git se puede reemplazar el última asignación con

if File.exists?('REVISION') 
    APP_REVISION = `cat REVISION` 
else 
    APP_REVISION = `git describe --abbrev=6 --always --tags.` 
end 
Cuestiones relacionadas