RailsアプリケーションがHerokuにデプロイされているとしましょう。これらの情報をビューに表示するにはどうすればよいですか?
- 最後のリビジョンのGitハッシュ
- 最後のリビジョンのタイムスタンプ
RailsアプリケーションがHerokuにデプロイされているとしましょう。これらの情報をビューに表示するにはどうすればよいですか?
Herokuは、コミットハッシュを使用して環境変数を設定しますENV['COMMIT_HASH']
。
タイムスタンプに関しては、コードをそこでホストする場合、ハッシュでgithubapiをヒットする可能性があります。ruby-github gemがこれに役立つように見えます。または、 HTTPartyを使用して自分で行うこともできます。
これは、アプリがdynoグリッドにデプロイされてリクエストを処理するときに、高速デプロイのために「スラッグ」にコンパイルされ、このスラッグにはgitリポジトリがないためです。
これを行う別の方法は、ローカルリポジトリから必要なバージョン情報を取得し、Heroku側の環境変数を更新するrakeタスクを使用してデプロイすることです。そうすれば、Heroku側の動作に依存することなく、タグやコミットハッシュなどを使用できます。
たとえば、最新のタグを使用する場合は、rakeタスクで次のようにします。
def app_version
%x[git describe --tags --abbrev=0].strip
end
次に、タスクの本文で:
run "git push blah:blah blah"
run "heroku config:add APP_VERSION=#{app_version}"
その情報を間接的に忍び込むのではなく、Herokuのgitから直接取得できるようにしたいと思いますが、その方法を理解することはできませんでした。
Herokuにグリットがインストールされています。したがって、それを使用してそこにリポジトリを開くことができます。
repo = Repo.new(Rails.root + '.git')
last_commit = repo.commits.first
p last_commit.id
p last_commit.authored_date
Repoオブジェクトを作成できるようにするには、Railsアプリにconfig.gem'grit'を組み込む必要があると思います。
ここでグリットについて読むことができますhttp://github.com/mojombo/grit/