2012-06-11 8 views
7

私はHerokuで開発拠点をホストしていますが、このブランチを使ってバグを探している人が2,3人いるので、コミットのSHA-1ハッシュこれは最新のHerokuに搭載されているので、どのバグがどのコミットに属するのかを知ることができます。herokuコンソールにgitデプロイメントの最新のshaハッシュを表示

しかし、私はこの情報を見つける方法を見つけることができません。 heroku実行コンソールのENV変数には何もありません。 「heroku releases」には、SHA-1ハッシュの最初の数文字を含む展開情報のリストが表示されますが、Herokuはそれをいくつか保存する必要があると思うようになりますが、どこで見つけることはできません。誰か知っていますか?

私は、私が本当に必要なだけ明確な質問を出していないことを実感しました。私は、Rails on Herokuの中でSHA-1ハッシュを見つけようとしていました。このように私はこのようなことをすることができます:

<h1><%= ENV['REV']</h1> 

ありがとう!

+0

私が聞いていますどうして?私たちは、このブランチを使ってバグを探している人が2人います。私はトロールしようとはしていませんが、なぜあなたはそのバグを他の人に見せてアップロードし、あなたが彼らが自分の開発マシンではなく英雄の特定のブランチを見るために持っている理由は何か、 – pjammer

+0

全く問題はない、私はそれがトローリングだとは思わない - おそらく私の方法は最適な考え方に裏打ちされていないかもしれないが、彼らがローカルマシン上でしかアプリケーションをテストしないと、 Herokuでまったく同じように動作します。 –

+0

それはステージング環境が正しいのですか?あなたはコード内で何人いるのですか?つまり、バグがあれば、ある人がマスターから分岐して修正し、ステージングを更新します。あなたはそれを承認する。その後、マスターに統合してプロダクションにプッシュします。あなたは何か眠りにつく。 – pjammer

答えて

10
だけで、他のリモートのGitリポジトリのような

トリートHerokuの - あなたはgit ls-remote使用することができますので

git ls-remote heroku

UPDATE(ここでherokuは、リモート名です) OPは実際にRuby envでSHAを取得しようとしていますが、可能な方法の1つはcustom buildpackです。

Heroku's Ruby Buildpackに移動してフォークすると、独自のバリエーションを作成できます。今すぐフォークをクローン化し、lib/language_pack/ruby.rbを見てください。次のような新しいメソッドを追加してください。

def get_SHA 
    #get SHA 
    #save SHA to ENV, ala: ENV['SHA'] = retrieved_sha 
end 

SHAを取得する方法はあなた次第です。あなたはgitのコマンドを実行し、返されたものを使うことができます:

git log -1 --format="%H"

それとも、avaynshtokのアドバイス、@を使用してreleasesメソッドを使用するHerokuの宝石を使用することができます。

次に、SHAを取得したら、ENV varとして設定します。

次に、ruby.rbcompile方法を見つけ、それの最後にget_shaメソッドを追加します。

def compile 
    Dir.chdir(build_path) 
    install_ruby 
    setup_language_pack_environment 
    allow_git do 
     install_language_pack_gems 
     build_bundler 
     create_database_yml 
     install_binaries 
     run_assets_precompile_rake_task 
     get_sha #your additional method 
    end 
end 
はバックのGitHubまでの変更内容をプッシュし、現在は、コマンドラインに頭の上

。あなたはHerokuのアプリに新しい設定VARを追加する必要があります:

heroku config:add [email protected]:<your GitHub username>/heroku-buildpack-ruby.git

あなたが持つ<your GitHub username>を交換しましたことを確認する必要がありますことをご注意...よく、あなたGitHubのユーザー名、だからあなたのフォークされたレポを指しています。

heroku labs:enable user_env_compile

今、あなたはすべてのセットのようになります。

最後に、ユーザーへのスラグコンパイラのアクセスが可能にvarsのHeroku labs featureを可能にするもの、最後のコマンドを実行します。では、今はどういうことでしょうか?さて、あなたがHerokuにプッシュすると、Herokuは変更を受け取り、カスタムbuildpack URLが設定されていることを確認します。 GitHubからカスタムビルドパックを取り出し、それを使ってスラッグを作成します。つまり、すべてのデフォルトコンパイルコマンドが実行されると、get_shaメソッドで終了し、ENV var SHAを適切なSHAに設定する必要があります。今度は、Ruby内のENV varにアクセスして、あなたがすることに対応する必要があります。あなたはHerokuの宝石を使用して情報をリリース取得することができます

+0

ご不明な点がございましたら、ごめんなさい。私はこの情報をRailsの中で見つけることになっています –

+0

ああ、まあ、それは少し変化します。私はそこにHerokuの機能が組み込まれているとは思わないが、Cedarを使っているならRuby/Rails buildpackをフォークしてENVを設定することができる。 – redhotvengeance

+0

私は参照してください。それはあまりにも悪いです、私は本当に彼らがSHAを保管していたと思っていました。つまり、どこかに*あると言っている "heroku releases"コマンドから取り出されたものです... –

3

c = Heroku::Client.new '', <API_KEY> 

欠点は、あなたが保存する必要がありますということです:https://github.com/heroku/herokuまた

c = Heroku::Client.new <LOGIN>, <PASSWORD> 
c.releases(<APPNAME>).last['commit'] 

、あなたのAPIキーを使用して認証することができますログイン/パスワードコンボ(またはAPIキー)をあなたのアプリやHeroku envのどこかに置いてください。 https://devcenter.heroku.com/articles/deploy-hooks

+0

フックとクライアントの両方が有望に見えますが、ビルドパックは以前考えていたよりははるかに激しくないようですのでENV変数SHAを見たいと思うたびにHerokuのクライアントを呼び出す必要はありません(これは、私が切手のように永遠に置くことを意図しています)。デプロイメントフックは、データベーステーブルに格納することでこれを排除します。ビルパックがうまく動作しない場合、私はこれに頼らざるを得ません。ありがとうございますAvaynshtok –

1

私はこのためHeroku platform API gemを使用して終了:

また、この情報を取得するためのフックを展開し使用することができます。それは大きな長いったらしいですが、メモ化されて、あなたは一度だけデプロイごとにこれを実行する必要がありますので、カスタムbuildpacks(手間のかかる)をいじり保存し、フック(安全でない)を展開:

def current_sha 
    @current_sha ||= begin 
    heroku = PlatformAPI.connect_oauth(ENV['HEROKU_TOKEN']) 
    slug_id = heroku.release.list(ENV['HEROKU_APP']).last["slug"]["id"] 
    heroku.slug.info(ENV['HEROKU_APP'], slug_id)["commit"] 
    end 
end 
+0

それは本当に素晴らしい提案です。私は、HerokuのHTTPデプロイメントフックが時折フレークであることを発見しました。 –

+0

これは私に正しいコミットを与えていません。それは短いshaを返すが、私はそれが何であるか分からず、繰り返し呼び出しでは更新されない。リリースリストの "最後の"メソッドはどこに定義されていますか? – justingordon

+0

問題は、これはコミットが200未満である場合にのみ有効です。 https://discussion.heroku.com/t/can-a-custom-buildpackputput-the-current-git-commit-sha-into-apps-env/932。 200年以降、毎回同じリリースが出ます!最後のリリースをより効果的に求めてください。 – justingordon

関連する問題