Ruby on rails Elastic Beanstalk Ruby/Rails需要安装git,因此bundle安装可以正常工作。。但事实并非如此

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

我在部署rails应用程序时遇到问题。。我创建了一个钩子,如AWS博客howto like上的示例:

甚至我运行了一个捆绑包来创建供应商/缓存,让所有的宝石都在那里。。。而且仍然得到: git://github.com/refinery/refinerycms-search.git (在2-0-稳定时)未签出。请运行
捆绑安装
(捆绑程序::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: []