Elastic Beanstalk Ruby/Rails需要安装git,所以bundle install工作..但不是

cfe*_*nux 40 ruby ruby-on-rails amazon-ec2 amazon-web-services amazon-elastic-beanstalk

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

packages:
  yum:
    git: []
Run Code Online (Sandbox Code Playgroud)

即使我运行一个捆绑包来创建供应商/缓存以获得所有宝石......并且仍然得到:git://github.com/refinery/refinerycms-search.git(在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
Run Code Online (Sandbox Code Playgroud)

更新更多信息:我决定用ec2-user登录到实例并注意到git安装了我需要安装的宝石到目前为止我可以看到..当我做捆绑列表时,它们都显示出错误的那个抱怨..我注意到,当我做一般的宝石清单然后它没有显示...但它应该使用捆绑.

Lor*_*gal 53

(请注意,只有在必须使用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: []
Run Code Online (Sandbox Code Playgroud)

禁用共享gem将强制所有依赖项vendor/bundle按照BUNDLE_PATH变量的指定出售到应用程序中.

请注意,只要有可能,您应该避免在应用程序中使用Git源安装公共库.将Git用于库位置会为部署安装引入另一个故障点,因为Git存储库可能暂时不可用或甚至永久移动.还要记住,在部署中强制销售安装会导致Elastic Beanstalk部署在具有相同依赖关系的应用程序的后续部署中慢得多.这是因为库将在每次部署时重新安装,而不是利用默认情况下Elastic Beanstalk让Bundler执行的系统范围的安装.

简而言之,如果有相关库的官方RubyGem版本,您应该使用该版本; 如果没有,您应该向图书馆作者建议提供官方RubyGem版本.

仅供参考FYI关于此Git问题的常规乘客/ Rails部署的类似问题之前被问过:Rails 3:Passenger无法找到由bundler安装的git gem

  • @LorenSegal而不是捆绑共享的宝石,你可以通过符号链接供应商获得相同的行为(不重新安装在每一个部署所有宝石)**不破的git宝石/捆绑到一个稳定的位置,然后运行`$束--deployment`.请参阅部署应用程序下的gembundler.com/v1.2/rationale.html.另外,有几个很好的理由从git捆绑; 到达这个问题的很多人都是从不在RubyGems上的git捆绑代码. (5认同)
  • FWIW,设置"BUNDLE_*"env vars在puma(而不是乘客)中运行时似乎没有必要. (2认同)

Mic*_*cah 11

另一种选择是直接将gem源与您的应用程序打包在一起,然后将Bundler指向该处理器.

将gem源复制到vendor/gems/mygem中

然后,在你的Gemfile中:

gem 'mygem', path: File.join(File.dirname(__FILE__), 'vendor', 'gems', 'mygem')
Run Code Online (Sandbox Code Playgroud)

在此处查看更多信息:http://viget.com/extend/bundler-best-practices


Gab*_*ley 6

亚马逊的Elastic Beanstalk Ruby AMI需要稍微调整一下,以便您可以在不牺牲部署速度的情况下从git捆绑宝石,这些行为是您使用Capistrano和Heroku开箱即用的.

幸运的是,Elastic Beanstalk配置API可以进行必要的调整,而无需维护自定义AMI.

这是Elastic Beanstalk配置,我用它来获得亚马逊自己的AMI所需的传统Ruby部署行为:https://github.com/gkop/elastic-beanstalk-ruby.


Jus*_*ner 5

在尝试接受的答案后,我发现一个更简单的.ebextensions/ruby.config配置是唯一有效的:

packages:
  yum:
    git: []
Run Code Online (Sandbox Code Playgroud)