42

Rails アプリのデプロイで問題が発生しています。AWS ブログのハウツーhttp://ruby.awsblog.com/post/Tx2AK2MFX0QHRIO/Deploying-Ruby-Applications-to-AWS-Elastic-の例のようなフックを作成しました。 Beanstalk-with-Gitのようなもの:

packages:
  yum:
    git: []

バンドルパッケージを実行してベンダー/キャッシュを作成し、そこにすべての宝石を入れます...それでも取得します: git://github.com/refinery/refinerycms-search.git (at 2-0-stable) はチェックされていませんアウト。実行してくださいbundle install(Bundler::GitError)

すべてのアプリを EB に移行しようとしています。しかし、gitがインストールされていないか、何かが起こっていることがわかりました..作成するEB ec2インスタンスにgitが必要です。

スタックトレース:

Error message:
git://github.com/refinery/refinerycms-search.git (at 2-0-stable) is not checked out.         Please run `bundle install` (Bundler::GitError)
Exception class:
PhusionPassenger::UnknownError
Application root:
/var/app/current
Backtrace:
#   File    Line    Location
0   /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 801 in        `rescue in load_spec_files'
1   /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 799 in   `load_spec_files'
2   /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 381 in `local_specs'
3   /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 774 in `specs'
4   /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 174 in `block in resolve'
5   /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 172 in `each'
6   /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 172 in `resolve' 
7   /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 113 in `specs'
8   /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 158 in `specs_for'
9   /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 147 in `requested_specs'
10  /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/environment.rb    23  in `requested_specs'
11  /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/runtime.rb    11   in `setup'
12  /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler.rb    116 in `setup'
13  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/utils.rb    326 in `prepare_app_process'
14  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/rack/application_spawner.rb 156 in `block in initialize_server'
15  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/utils.rb    563 in `report_app_init_status'
16  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/rack/application_spawner.rb 154 in `initialize_server'
17  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-  1002/support/lib/phusion_passenger/abstract_server.rb    204 in `start_synchronously'
18  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server.rb  180 in `start'
19  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/rack/application_spawner.rb 129 in `start'
20  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager_orig.rb   253 in `block (2 levels) in spawn_rack_application'
21  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server_collection.rb   132 in `lookup_or_add'
22  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager_orig.rb   246 in `block in spawn_rack_application'
23  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server_collection.rb   82  in `block in synchronize'
24      prelude>    10:in `synchronize'
25  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server_collection.rb   79  in `synchronize'
26  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager_orig.rb   244 in `spawn_rack_application'
27  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager_orig.rb   137 in `spawn_application'
28  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager.rb    16  in `spawn_application_with_env'
29  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager_orig.rb   275 in `handle_spawn_application'
30  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server.rb  357 in `server_main_loop'
31  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server.rb  206 in `start_synchronously'
32  /var/lib/passenger-standalone/3.0.17-x86_64-ruby1.9.3-linux-gcc4.4.6-1002/support/helper-scripts/passenger-spawn-server

更新の詳細情報: ec2-user を使用してインスタンスにログインすることにしました。git がインストールされていることに気付きました。これまでのところ、必要な宝石がインストールされています。バンドル リストを実行すると、エラーが発生したものもすべて表示されます。について不平を言っています..一般的なgemリストを作成すると表示されないことに気付きました...しかし、バンドルのものを使用する必要があります。

4

5 に答える 5

57

(次の回避策は、依存関係に Git ソースを使用する必要がある場合にのみ使用する必要があることに注意してください。回避できる場合は、外部 Git リポジトリから依存関係をインストールしないことをお勧めします。その理由の詳細については、以下を参照してください。 )

Passenger を使用して Gemfile で Git 支援ライブラリを使用する場合は、インストールで共有 gem を無効にする必要があります (上記のフックに Git をインストールすることに加えて)。これを行うには、次のように既存のファイルBUNDLE_DISABLE_SHARED_GEMSに Bundler 環境変数を設定します。.ebextensions/ruby.config

option_settings:
  - option_name: BUNDLE_DISABLE_SHARED_GEMS
    value: "1"
  - option_name: BUNDLE_PATH
    value: "vendor/bundle"

packages:
  yum:
    git: []

vendor/bundle共有 gem を無効にすると、変数で指定されたとおりに、すべての依存関係が強制的にアプリケーションにベンダー化されBUNDLE_PATHます。

可能な限り、アプリケーションで Git ソースから公開ライブラリをインストールすることは避けるべきであることに注意してください。ライブラリの場所に Git を使用すると、Git リポジトリが一時的に利用できなくなったり、完全に移動されたりする可能性があるため、展開インストールに別の障害点が生じます。また、展開でベンダー インストールを強制すると、同じ依存関係を持つアプリの後続の展開で Elastic Beanstalk の展開が大幅に遅くなることに注意してください。これは、Elastic Beanstalk が Bundler にデフォルトで実行させるシステム全体のインストールを利用するのではなく、デプロイのたびにライブラリが再インストールされるためです。

つまり、問題のライブラリの公式の RubyGem リリースがある場合は、代わりにそのバージョンを使用する必要があります。そうでない場合は、公式の RubyGem リリースを利用可能にすることをライブラリの作成者に提案する必要があります。

参考までに、通常の Passenger/Rails デプロイメントでのこの Git の問題に関する同様の質問が以前に尋ねられました: Rails 3: Passenger can't find git gems installed by bundler

于 2012-12-01T07:41:39.270 に答える
14

もう 1 つのオプションは、gem ソースをアプリケーションに直接パッケージ化してから、バンドラーにその場所を指定することです。

gem ソースを vendor/gems/mygem にコピーします。

次に、Gemfile で次のようにします。

gem 'mygem', path: File.join(File.dirname(__FILE__), 'vendor', 'gems', 'mygem')

詳細はこちら: http://viget.com/extend/bundler-best-practices

于 2013-12-18T22:11:47.283 に答える
6

Amazon の Elastic Beanstalk Ruby AMI は、展開速度、Capistrano および Heroku ですぐに使える動作を犠牲にすることなく git から gem をバンドルできるようにするために、少し調整する必要があります。

幸いなことに、Elastic Beanstalk 設定 API を使用すると、カスタム AMI を維持しなくても、必要な調整を行うことができます。

以下は、Amazon 独自の AMI を使用して目的の従来の Ruby デプロイ動作を実現するために使用する Elastic Beanstalk の構成です: https://github.com/gkop/elastic-beanstalk-ruby

于 2013-06-01T22:52:08.870 に答える
5

受け入れられた答えを試した後、より単純な構成.ebextensions/ruby.configが機能する唯一の構成であることがわかりました。

packages:
  yum:
    git: []
于 2017-09-14T16:33:14.283 に答える
2
  • 多くの調査とテストを行った結果、これはAmazonがパッセンジャー環境値に問題を抱えていることに関連していると思います...
  • 私は手動で rails s を実行することができましたが、それは正常に動作し、すべての gem がロードされました..

    バンドル パック --all

  • --すべて、git gem もパックします。

  • その後、それは魅力のように実行されます..

  • Amazonがバンドルでこの問題を修正している間、これを実行できるようにするために、フックを作成し、インストールごとに強制的に実行します。最善の方法ではありませんが、機能します。

注: フックを使用して EB 更新でコマンドを実行するのが見られないため、git でベンダー/キャッシュを追加すると、デフォルトですべてがアップロードされます。

于 2012-12-01T05:40:07.070 に答える