93

私はバンドラーとカピストラーノにかなり慣れていないので、それらを一緒に使用しようとしています。デプロイしようとすると、次のメッセージが表示されます。

Gemfile を変更した後、展開モードでインストールしようとしています。別の場所で「bundle install」を実行し、更新された Gemfile.lock をバージョン管理に追加します。

不平を言っているシステムを満足させる方法がわかりません。ドキュメントを読んだので、なぜ不平が出てくるのかわかりません。

Gemfile.lock が存在し、Gemfile(5) を更新した場合、バンドラーは、更新していないすべての gem に対して Gemfile.lock の依存関係を使用しますが、更新した gem の依存関係を再解決します。 . この更新プロセスの詳細については、以下の保守的な更新を参照してください。

これは、Gemfile が期待どおりではないという事実を Bundler が処理できることを意味すると解釈します。何か助けはありますか?

仕様: Ruby 1.9.3、Rails 3.2.3、Capistrano 2.12.0、Bundler 1.1.4、Windows 7、Posix マシンへのデプロイ。

編集:私の Gemfile には、次のようなロジック ブロックが含まれています。

unless RbConfig::CONFIG['host_os'] === 'mingw32'
  # gem 'a' ...
end
4

19 に答える 19

84

表示されるエラー メッセージは、とが互いに同意していないGemfile.lockことが原因である可能性があります。最後に(または)を実行してから、Gemfile で何かを変更したようです。すると、Gemfile に加えた変更で Gemfile.lock が更新されます。GemfileGemfile.lockbundle installupdatebundle install

bundle installローカルで実行していることを確認し、Gemfile.lockその後、新しく更新されたソースを管理するためにチェックインします。次に、デプロイしてみます。

編集: コメントで認識されているように、Gemfile の条件により、あるプラットフォームでは有効な Gemfile.lock が発生し、別のプラットフォームでは無効になりました。Gemfileでこれらのプラットフォーム依存の gem に:platformフラグを指定すると、非対称性が解決されます。

于 2012-07-16T23:04:57.667 に答える
20

グローバル Bundler 設定に注意してください。

開発環境にグローバル構成~/.bundle/configがありましたが、CI / 運用環境にはなかったのでGemfile.lock、開発環境で生成された構成が CI / 運用環境のものとは異なりました。

私の場合github.https、開発環境で true に設定していましたが、CI / 運用環境にはそのような構成がありませんでした。これにより、2 つのGemfile.lockファイルが異なっていました。

于 2016-11-12T21:46:45.387 に答える
9

私の特定の問題は、@ JoshPinter によって報告されたものに関連していました。つまり、バンドラーが github から gem を取得するために使用するプロトコルの dev-vs-deploy ホストの不一致です。

簡単に言うと、次のGemfileエントリを変更するだけでした...

gem 'activeadmin', github: 'activeadmin'

...この安全な構文に (リファレンスを参照):

gem 'activeadmin', git: 'https://github.com/activeadmin/activeadmin.git'

そして、私の展開は通常に戻りました。

于 2016-12-22T08:39:22.087 に答える
3
rm -fr .bundle

私の問題を修正しました。

于 2016-10-25T21:33:33.323 に答える
2

エラーの別の原因:

これは少しばかげていますが、他の誰かが同じ間違いを犯すと確信しています。

Rails 4 の場合、Heroku は gem rails_12factor を追加しました。追加される前に使用していた場合は、次の 2 つの gem があります。

gem 'rails_log_stdout',  github: 'heroku/rails_log_stdout'
gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets'

新しいものを追加するときは、それらを削除する必要があります。(それらは含まれています)。gem ファイルのそれらの行に触れるまでは、問題を回避できると思います。そうすると、Heroku が重複に気づき、上記のエラーで叫びます。

Rails4で頑張ってください。

于 2013-08-25T01:04:16.597 に答える
2

このコマンドの後、通常のバンドル インストールを再度実行できます。

bundle install --no-deployment
于 2018-12-11T23:35:12.803 に答える
1

私たちの場合、本番マシンで実行されていた古いバージョンのバンドラーでは利用できなかった機能を使用していました。したがって、バンドラーをアップグレードするだけで十分でしたgem update bundler

于 2015-06-26T08:41:46.307 に答える
1

私は前に似たようなことに遭遇しました。それを修正する1つの方法は、サーバー上で必要以上のスペースを必要とする可能性があると思いますが、実行することです

bundle install --deployment 

そしてデプロイを試みます。これは、すべての gem を vendor フォルダーにインストールするようなものです。これは一般的に避けるのが良いと思いますが、おそらくうまくいくでしょう。私のアプリは以前はこのように動作していました。私の解決策は、Gemfile からダウンロードする正確なバージョンを削除してから、再バンドルしてデプロイすることでした。

gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git', :branch => 'master'

gem 'rails_admin'

または、提案されていることを実行して、プロジェクトを本番サーバーからローカル マシンに Git し、バンドルしてからサーバーに再プッシュすることもできます。この解決策は 100% 正しいとは限りませんが、一部はうまくいきました... 共有したいと思いました。幸運を

于 2012-07-16T22:52:36.107 に答える
0

同様の問題に遭遇しましたが、両方bundle installを実行しbundle update、Heroku はプッシュを拒否しました。

Gemfile.lock を削除してからbundle install再度実行するだけで問題を解決しました。次に、それを追加してコミットし、git リポジトリにプッシュしました。その後、Heroku へのプッシュに問題はありませんでした。

于 2014-01-14T15:20:23.087 に答える
0

この問題は、古いバージョンのコードを指すサブモジュールに関連している可能性があります。私にとっては、サブモジュールを更新することでこの問題を解決しました

サブモジュールがある場合は、次を実行してみてください。

git submodule update --init

bundle install

于 2018-07-12T06:13:34.673 に答える
0

heroku の場合、 の構文を変更する必要はありませんGemfileBUNDLE_GITHUB__HTTPS環境変数として (2 つのアンダースコアに注意してください) を追加trueして、(heroku アプリのダッシュボードSettingsのセクションのタブの下でConfig Vars) に設定するだけです。これにより、そのようなすべてのリクエストに対してプロトコルが からgit://に切り替わります。https://

于 2016-12-24T05:31:53.167 に答える