2010-12-01 4 views
9

私はcapistranoを使用して私のレール3アプリを配備しています。私はgitのバージョン(および日付情報)を得て、これで私のウェブサイトのフッターを更新したいと思います。Rails 3アプリ、GITのバージョンを取得してウェブサイトを更新するには?

どうすればいいですか?

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

のgitであなたはでした:私はグローバル

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

とアプリケーションのレイアウト内に置く初期化子で

答えて

8

Davidの指示に基づいて、私はイニシャライザ "git_info.rb"を作成することでこれを解決しました。

あなたのRailsの初期化子のディレクトリにこのファイルを配置しgit_info.rbの内容は次のとおりです。

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

次に、あなたのフッターに、あなたはこの出力(HAML構文)を使用することができます。

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

#rev_infoのフォント色を背景色と同じに設定すると、カーソルで強調表示したときにのみテキストが表示されます。

私はこれを試してみましたが、開発モードで動作している間は、 "deploy" post capistrano deployで上書きされているようです。 Capistranoは、展開時に "deploy"という独自のローカルブランチを作成する必要がありますか?カピストラーノを使用していない人々に

+1

デフォルトでは、私たちのcapistano deploy.rbに、この余分なデータを保持するために 'set:copy_exclude、" .git/* "'を追加します。上記の開発段階では、生産のためのgit repoはありません。しかし、capistrano(とheroku、偶然にも)は、展開に追加されるREVISIONファイルを作成します。そのファイルが存在する場合はそこからSHAタグを使用するだけです。 – jwadsack

+1

代わりに 'git describe'を使わないのはなぜですか –

0

長い時間前、私は転覆のためにこれをやりましたグローバルを次のように変更してください。

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

今それについて考え、それが良いかもしれへ:

  • カピストラーノは、設定ファイルを作成します(設定/ git_status.yml)
  • 初期化子は、コンフィギュレーションを解析し、変数に

を設定し、私は確信していません、それは単なるアイデアです。

8

、きれいに1:

秒1がきれい形式でSHAを与える
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` 

(例:4df21c0設定/初期化子/ git_info.rbオン

)。

3番目のものはUNIX TIMESTAMPを返します。これは後でTime/DateTimeを使用してフォーマットします。

2

は、多くの場合、1つは、gitリポジトリにデプロイしませんが、任意のリポジトリ情報が含まれていないリリースに:

カピストラーノはGitはSHAコミットされ、各展開を成功とリビジョンのファイルを保存します。このファイルはREVISIONと呼ばれ、展開ディレクトリのルートにあります。あなたのRailsアプリの設定/初期化子で

、ファイルを作成します。

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

場合や、展開の外は1を置き換えることができますgitリポジトリが常にあることを確認してください:ようなものでdeploy_version.rbを最後の割り当ては

if File.exists?('REVISION') 
    APP_REVISION = `cat REVISION` 
else 
    APP_REVISION = `git describe --abbrev=6 --always --tags.` 
end 
関連する問題