Elastic Beanstalk Ruby / Rails需要安装git所以捆绑安装工程..但不是

我在部署我们的Rails应用程序时遇到问题..我在AWS博客上创build了一个类似于示例的钩子howto http://ruby.awsblog.com/post/Tx2AK2MFX0QHRIO/Deploying-Ruby-Applications-to-AWS-Elastic- Beanstalk-with-Git喜欢:

packages: yum: git: [] 

即使我运行捆绑包创build供应商/caching有所有的gem那里…仍然得到:git://github.com/refinery/refinerycms-search.git(在2-0稳定)不检查出。 请运行bundle install (Bundler :: GitError)

任何帮助都会很好,我们试图将所有的应用程序移到EB。 但注意到git没有安装或者正在发生什么..我需要在它创build的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 

更新更多的信息:我决定login到ec2用户的实例,并注意到git安装的gem我需要安装到目前为止,我可以看到..当我做捆绑列表,他们都显示,即使是错误是抱怨..我注意到,当我做一般的gem名单,然后它不会显示…但它应该使用捆绑一。

请注意,下面的解决方法应该只用于必须使用Git源进行依赖关系的情况下,build议不要从外部Git存储库安装依赖关系,如果可以避免的话,请参阅下面的详细说明。

在带有Passenger的Gemfile中使用Git支持的库时, 必须在安装中禁用共享gem(除了在上面列出的钩子中安装Git)之外。 您可以通过在现有的.ebextensions/ruby.config文件中设置BUNDLE_DISABLE_SHARED_GEMS Bundler环境variables来执行此操作,如下所示:

 option_settings: - option_name: BUNDLE_DISABLE_SHARED_GEMS value: "1" - option_name: BUNDLE_PATH value: "vendor/bundle" packages: yum: git: [] 

禁用共享gem将强制所有依赖关系在BUNDLE_PATHvariables指定的vendor/bundle出售到您的应用程序中。

请注意,只要有可能,您应该避免使用应用程序从Git源安装公共库。 使用库位置的Git引入了部署安装的另一个失败点,因为Git仓库可能暂时不可用,甚至永久移动。 另请注意,在部署中强制进行商业安装会导致您的Elastic Beanstalk部署在随后部署具有相同依赖性的应用程序时会慢得多。 这是因为这些库将在每次部署时重新安装,而不是利用Elastic Beanstalk的Bundler默认执行的系统范围安装。

简而言之,如果有问题的库的官方RubyGem版本,则应该使用该版本。 如果没有的话,你应该build议图书馆作者提供官方的RubyGem版本。

仅供参考关于此常规Passenger / Rails部署的Git问题的类似问题之前曾被问到: Rails 3:Passenger无法find由bundler安装的git gems

另一种select是将gem源直接打包到应用程序中,然后指向打包程序。

将gem源复制到vendor / gems / mygem

然后,在你的Gemfile中:

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

在这里看到更多: http : //viget.com/extend/bundler-best-practices

亚马逊的Elastic Beanstalk Ruby AMI需要稍微调整一下,以便让您从git中捆绑gem而不牺牲部署速度,以及Capistrano和Heroku提供的开箱即用的行为。

幸运的是,Elastic BeanstalkconfigurationAPI可以进行必要的调整,而不需要您维护自定义的AMI。

以下是我用来使用Amazon自己的AMI获取所需的常规Ruby部署行为的Elastic Beanstalkconfiguration: https : //github.com/gkop/elastic-beanstalk-ruby 。

  • 经过大量的研究和testing,我觉得这个和亚马逊有关于乘客环境价值的问题有关。
  • 我能够手动运行rails s,然后它运行良好,所有的gem加载..但乘客它并没有发现,如果我运行

    捆绑包 – 所有

  • 所以它也包装的GITgem..

  • 它会像一个魅力运行..

  • 为了能够在同一时间运行此亚马逊修复这个问题捆绑我创build一个钩子,并强制它在每次安装后运行。 不是最好的方式,但工作。

注意:使用hook我不能在EB更新中运行命令,所以我git添加供应商/caching,并默认上传。

尝试接受的答案后,我发现一个简单的.ebextensions/ruby.config是唯一的工作configuration:

 packages: yum: git: []