Ruby on rails Elastic Beanstalk Ruby/Rails需要安装git,因此bundle安装可以正常工作。。但事实并非如此
我在部署rails应用程序时遇到问题。。我创建了一个钩子,如AWS博客howto like上的示例: 甚至我运行了一个捆绑包来创建供应商/缓存,让所有的宝石都在那里。。。而且仍然得到: git://github.com/refinery/refinerycms-search.git (在2-0-稳定时)未签出。请运行Ruby on rails Elastic Beanstalk Ruby/Rails需要安装git,因此bundle安装可以正常工作。。但事实并非如此,ruby-on-rails,ruby,amazon-web-services,amazon-ec2,amazon-elastic-beanstalk,Ruby On Rails,Ruby,Amazon Web Services,Amazon Ec2,Amazon Elastic Beanstalk,我在部署rails应用程序时遇到问题。。我创建了一个钩子,如AWS博客howto like上的示例: 甚至我运行了一个捆绑包来创建供应商/缓存,让所有的宝石都在那里。。。而且仍然得到: git://github.com/refinery/refinerycms-search.git (在2-0-稳定时)未签出。请运行捆绑安装(捆绑程序::GitError) 任何帮助都很好,我们正在尝试将所有应用程序移动到EB。但是似乎git没有安装或者正在发生什么事情。。我需要它创建的EB ec2实例上的git
捆绑安装(捆绑程序::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用户登录实例,并注意到
git已安装
我需要的宝石已经安装到我能看到的地方了。。当我做bundle list时,它们都会出现,即使是错误所抱怨的那一个。。我注意到,当我做一个一般的宝石清单
然后它就不出现了。。。但它应该使用bundle one。
- 好吧,经过大量的研究和测试,我认为这是相关的
对于亚马逊来说,乘客环境值有一些问题
- 我能够手动运行rails s,然后它工作得很好
宝石装了。。但对于乘客,它并没有这样发现,如果我运行
打包--全部
- --所有这些都包含git宝石
- 然后它会像一个符咒一样运行
- 为了能够在Amazon修复此问题的同时运行此功能
使用bundle,我创建了一个钩子,并强制它在每次安装后运行。
这不是最好的方法,但很有效
注意:使用我看不到的钩子在EB更新上运行命令,因此我可以添加供应商/缓存,并在默认情况下将其全部上载。(请注意,只有当您必须将Git源用于依赖项时,才应使用以下解决方法。如果可以避免,建议不要从外部Git存储库安装依赖项。请参阅下面的详细信息以了解原因。)
在Gemfile中与Passenger一起使用Git支持的库时,必须在安装中禁用共享gems(除了在上面列出的挂钩中安装Git之外)。可以通过在现有的.ebextensions/ruby.config
文件中设置BUNDLE\u disable\u shared\u gems
Bundler环境变量来做到这一点,如下:
option_settings:
- option_name: BUNDLE_DISABLE_SHARED_GEMS
value: "1"
- option_name: BUNDLE_PATH
value: "vendor/bundle"
packages:
yum:
git: []
禁用共享gem将强制所有依赖项按照bundle\u PATH
变量指定的方式在vendor/bundle
中出售到您的应用程序中
请注意,尽可能避免在应用程序中安装来自Git源的公共库。将Git用于库位置会导致部署安装的另一个失败点,因为Git存储库可能暂时不可用,甚至永久移动。还请记住,在在具有相同依赖项的应用程序的后续部署中,部署将导致您的Elastic Beanstalk部署慢得多。这是因为库将在每次部署时重新安装,而不是利用Elastic Beanstalk Bundler默认执行的系统范围安装
简言之,如果有相关库的正式RubyGem版本,则应使用该版本;如果没有,则应建议库作者提供正式RubyGem版本
仅供参考,以前曾有人问过关于常规乘客/轨道部署的Git问题的类似问题:Amazon的Elastic Beanstalk Ruby AMI需要一些调整,以便允许您在不牺牲部署速度的情况下从Git捆绑gems,您可以从Capistrano和Heroku那里获得现成的行为
幸运的是,Elastic Beanstalk配置API可以进行必要的调整,而无需维护自定义AMI
下面是我使用的Elastic Beanstalk配置,用于在Amazon自己的AMI中获得所需的常规Ruby部署行为:。另一种选择是直接将gem源代码与应用程序打包,然后将bundler指向该配置
将gem源复制到vendor/gems/mygem
然后,在您的文件中:
gem 'mygem', path: File.join(File.dirname(__FILE__), 'vendor', 'gems', 'mygem')
请参阅此处的更多信息:在尝试接受的答案后,我发现一个更简单的.ebextensions/ruby.config
是唯一有效的配置:
packages:
yum:
git: []
用完整的错误stacktrace更新您的问题。好的,谢谢您查看此问题。您能确认您的Ruby版本吗?AWS Elastic Beanstalk 1.9.3选项64位吗?Schris,您并不孤单,我有完全相同的问题。如果我找到了解决方法,我会让您知道。那么hook/EB会为您将所有内容安装到供应商/捆绑包中吗?所以我不需要用bundle-package命令发送一个钩子,对吗?嗯,很奇怪。我试着按照你的方式来做,它确实创建了供应商/捆绑包,但我又回到了缺少gem的问题上-(我无法复制这一点。我用refinerycms和refinerycms搜索gems创建了一个全新的应用程序,它能够用上面的eExtension加载它们。您尝试过新的容器吗?还有,它仍然是失败的同一个gem吗?@LorenSegal不是捆绑共享gems,您可以获得相同的行为(并非在每次部署时都重新安装所有gems)在不破坏git gems的情况下,将供应商/捆绑包符号链接到一个稳定的位置,然后运行$bundle--deployment
。请参阅Deploying Your Application下的gembundler.com/v1.2/deployment.html。另外,从git捆绑有几个很好的理由;许多遇到这个问题的人都是从git捆绑不在RubyGems上的代码.FWIW,在puma中运行时,设置BUNDLE.*
env vars似乎没有必要(与passenger相反)。我正在尝试此解决方案,出售所有git gems。因为使用前面答案中描述的方法,一旦启动新实例,它就无法从gitThis安装所需的gems
packages:
yum:
git: []