web-dev-qa-db-ja.com

Elastic Beanstalk Ruby / Railsはgitをインストールする必要があるため、バンドルインストールは機能しますが、そうではありません

Rails app ..のデプロイに問題があります。AWSブログのhowtoに例のようなフックを作成しました http://Ruby.awsblog.com/post/Tx2AK2MFX0QHRIO/Deploying-Ruby-Applications-to-AWS-Elastic-Beanstalk-with-Git のように:

packages:
  yum:
    git: []

バンドルパッケージを実行してベンダー/キャッシュを作成し、すべてのgemをそこに置いても... 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はこれまでにインストールされています。バンドルリストを実行すると、エラーがあるものもすべて表示されます。不平を言う..私が一般的なgemリストを実行すると、表示されないことに気づきます...しかし、それはバンドルのものを使用しているはずです。

40
cfernandezlinux

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

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

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

packages:
  yum:
    git: []

共有gemを無効にすると、vendor/bundle変数で指定されているように、すべての依存関係がBUNDLE_PATHのアプリケーションに強制的に組み込まれます。

可能な場合は常に、アプリケーションにGitソースからのパブリックライブラリをインストールしないでください。ライブラリの場所にGitを使用すると、Gitリポジトリが一時的に利用できなくなったり、永久に移動したりする可能性があるため、展開インストールに別の障害ポイントが発生します。デプロイでベンダーによるインストールを強制すると、Elastic Beanstalkのデプロイが、同じ依存関係を持つアプリの後続のデプロイで非常に遅くなることにも注意してください。これは、Elastic BeanstalkがデフォルトでBundlerで実行するシステム全体のインストールを利用する代わりに、ライブラリがデプロイごとに再インストールされるためです。

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

通常のPassenger/RailsデプロイメントでのこのGitの問題に関する同様の質問が以前に尋ねられました: Rails 3:Passengerがbundlerによってインストールされたgit gemを見つけることができません

54
Loren Segal

もう1つのオプションは、gemソースをアプリケーションと直接パッケージ化し、それをbundlerに向けることです。

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

次に、Gemfileで:

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

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

11
Micah

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

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

これは、Amazon独自のAMIを使用した望ましい従来のRubyデプロイメント動作を取得するために使用するElastic Beanstalk構成です。 https://github.com/gkop/elastic-beanstalk-Ruby

6
Gabe Kopley

受け入れられた答えを試した後、私はより簡単な.ebextensions/Ruby.configが機能した唯一の設定でした:

packages:
  yum:
    git: []
3
Justin Tanner
  • たくさんの調査とテストを行った結果、これはAmazonが乗客のenv値に問題を抱えていることに関係していると思います...
  • 私は手動で実行することができましたRails s、それからそれはうまくいき、すべてのgemがロードされました..

    バンドルパック-すべて

  • -allなので、git gemもパックされます。

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

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

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

2
cfernandezlinux