1

私はRuby on Rails チュートリアルの Rails 3.2 版に取り組んでおり、第 5 章の終わりに近づいています。数日前に私のコードを受け入れましたが、Heroku は私がプッシュしたときにそれを取りたがりません。Gemfile.lock が必要であると不平を言っていますが、これは理解できますが、既に提供しています。

数日前、私はこのプロジェクトを Windows で開始し、それが原因で Bundler 地獄に遭遇したため、Gemfile.lock をリポジトリから削除しました。その時、Gemfile.lock の名前を .gitignore に追加しましたが、今はその名前を .gitignore から削除して、再度追加しました。それでも、Heroku はまだコミットされていないと考えています。

私に何ができる?現段階で Gemfile.lock を再追加する以外に、リベースを使用して、最初にそれを削除したコミットを削除しようとしました。また、アプリを Heroku から完全に削除し、再度追加しました (同じ名前と別の名前を使用)。また、シェル セッションではキャプチャしませんでしたが、bundle updateGemfile.lock が Gemfile と一致することを確認するために、このすべての前に実行しました。

これが私のbashセッションです:

$ type ssha-heroku
ssha-heroku is aliased to `eval `ssh-agent`; ssh-add -t 5m ~/.ssh/heroku.id_rsa'

ruby-1.9.3-p392@railstutorial3 ~/Scripts/Rails/railstutorial/sample_app
$ ssha-heroku
Agent pid 19642
Enter passphrase for /Users/eric/.ssh/heroku.id_rsa:
Identity added: /Users/eric/.ssh/heroku.id_rsa (/Users/eric/.ssh/heroku.id_rsa)
Lifetime set to 300 seconds

ruby-1.9.3-p392@railstutorial3 ~/Scripts/Rails/railstutorial/sample_app
$ git push heroku master
Counting objects: 384, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (260/260), done.
Writing objects: 100% (384/384), 60.58 KiB, done.
Total 384 (delta 172), reused 215 (delta 86)

-----> Ruby/NoLockfile app detected
 !
 !     Gemfile.lock required. Please check it in.
 !
 !     Heroku push rejected, failed to compile Ruby/nolockfile app

To git@heroku.com:stormy-coast-5058.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:stormy-coast-5058.git'

ruby-1.9.3-p392@railstutorial3 ~/Scripts/Rails/railstutorial/sample_app
$ git ls-files |grep Gemfile
Gemfile

ruby-1.9.3-p392@railstutorial3 ~/Scripts/Rails/railstutorial/sample_app
$ vim .gitignore # here I remove the line ignoring Gemfile.lock

ruby-1.9.3-p392@railstutorial3 ~/Scripts/Rails/railstutorial/sample_app
$ git add .gitignore Gemfile.lock

ruby-1.9.3-p392@railstutorial3 ~/Scripts/Rails/railstutorial/sample_app
$ git commit -m 'Stop ignoring Gemfile.lock so we can deploy to Heroku'
[master 1b691f1] Stop ignoring Gemfile.lock so we can deploy to Heroku
 2 files changed, 182 insertions(+), 6 deletions(-)
 create mode 100644 Gemfile.lock

ruby-1.9.3-p392@railstutorial3 ~/Scripts/Rails/railstutorial/sample_app
$ git ls-files |grep Gemfile
Gemfile
Gemfile.lock

ruby-1.9.3-p392@railstutorial3 ~/Scripts/Rails/railstutorial/sample_app
$ git push heroku master
Counting objects: 387, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (263/263), done.
Writing objects: 100% (387/387), 60.90 KiB, done.
Total 387 (delta 174), reused 215 (delta 86)

-----> Ruby/Rails app detected
-----> Installing dependencies using Bundler version 1.3.2
       Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin --deployment
       You are trying to install in deployment mode after changing
       your Gemfile. Run `bundle install` elsewhere and add the
       updated Gemfile.lock to version control.
       You have added to the Gemfile:
       * rb-inotify (~> 0.9)
       * libnotify (= 0.5.9)
       You have deleted from the Gemfile:
       * rb-fsevent (= 0.9.1)
       * terminal-notifier-guard (= 1.5.3)
 !
 !     Failed to install gems via Bundler.
 !
 !     Heroku push rejected, failed to compile Ruby/rails app

To git@heroku.com:stormy-coast-5058.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:stormy-coast-5058.git'

ruby-1.9.3-p392@railstutorial3 ~/Scripts/Rails/railstutorial/sample_app
$
4

1 に答える 1

1

私は最終的に、プラットフォーム (Mac、Linux、および Windows) に応じて Guard 通知に異なる gem を指定したという事実に問題を突き止めました。しかし、たとえばbundle installMac で実行すると、Gemfile.lock 内の Linux または Windows の gem がロックされません。ホスト プラットフォームを検出するステートメントにこれらの宝石がありましたcaseが、Bundler はそれから私の意図を完全に判断できなかったようです。

条件文全体を削除し、他のプラットフォームではなく、Mac の gem を指定しただけです。しばらくして、さらに調査します。これらの gem はテスト専用であるため、Heroku の Bundler がそれらについて知る必要はまったくないと思います。

于 2013-04-08T23:46:44.420 に答える