2010-12-01 19 views

Répondre

8

Basé sur la direction de David, j'ai résolu cela en créant un initialiseur "git_info.rb". Placez ce fichier dans le répertoire de votre Rails

Le contenu du git_info.rb sont:

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

Ensuite, dans votre pied de page, vous pouvez utiliser cette sortie (syntaxe HAML):

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

Vous souhaiterez peut-être définir la couleur de police de #rev_info comme la couleur d'arrière-plan, de sorte que le texte est visible uniquement lorsque vous le mettez en surbrillance avec votre curseur.

J'ai juste essayé ceci, et pendant qu'il fonctionne en mode de développement, il semble que la branche soit écrasée avec le déploiement "de déploiement" de capistrano. Capistrano doit créer sa propre branche locale appelée "deploy" sur deploy?

+1

par défaut, nous ajoutons 'set: copy_exclude, ".git/*"' dans notre Capistrano deploy.rb garder que les données supplémentaires hors du site. Donc, alors que ce qui précède fonctionne en développement, il n'y a pas de repo git pour la production. Cependant, capistrano (et heroku, d'ailleurs) crée un fichier REVISION qui est ajouté au déploiement de sorte que vous pouvez simplement utiliser la balise SHA à partir de là quand cela existe. – jwadsack

+1

Pourquoi ne pas utiliser 'git describe' à la place –

0

Il y a longtemps que je l'ai fait pour subversion:
dans un initialiseur je mets une approche globale

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

et dans la mise en page de l'application:

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

avec git vous pourriez changer le global à quelque chose comme:

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

Maintenant penser, il peut être préférable de:

  • Capistrano crée un fichier de configuration (config/git_status.yml)
  • initialiseurs parse la configuration et définit les variables

Je ne suis pas sûr, c'est juste une idée.

8

Pour les personnes qui n'utilisent pas Capistrano, une plus jolie:

Sur config/initializers/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` 

Le second donne le sha sous forme plus jolie (ex: 4df21c0).

Le troisième renvoie le TIMESTAMP UNIX, que je formate en utilisant Time/DateTime plus tard.

2

Souvent, on ne déploie pas dans un dépôt git, mais dans une version qui ne contient pas d'informations référentiel:

Capistrano stocke un fichier de révision à chaque déploiement qui engage sha le git .Ce fichier s'appelle REVISION et peut être trouvé à la racine du répertoire de déploiement.

Dans config/initializers de votre application Rails, créez un fichier: deploy_version.rb avec quelque chose comme:

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

Ou si sûr que en dehors du déploiement, il y a toujours un dépôt git, on peut remplacer la dernière affectation avec

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