简体   繁体   English

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

[英]Elastic Beanstalk Ruby/Rails need to install git so bundle install works.. but is not

I'm having an issue deploying our rails app.. I created a hook like the example on the AWS blog howto http://ruby.awsblog.com/post/Tx2AK2MFX0QHRIO/Deploying-Ruby-Applications-to-AWS-Elastic-Beanstalk-with-Git like: 我在部署rails应用程序时遇到了问题。我在AWS博客上创建了一个类似于示例的钩子http://ruby.awsblog.com/post/Tx2AK2MFX0QHRIO/Deploying-Ruby-Applications-to-AWS-Elastic- Beanstalk-with-Git喜欢:

packages:
  yum:
    git: []

even I run a bundle package to create vendor/cache to have all the gems there... and still getting: git://github.com/refinery/refinerycms-search.git (at 2-0-stable) is not checked out. 即使我运行一个捆绑包来创建供应商/缓存以获得所有宝石......并且仍然得到:git://github.com/refinery/refinerycms-search.git(在2-0-stable)未被检查出。 Please run bundle install (Bundler::GitError) 请运行bundle install (Bundler :: GitError)

any help will be nice, we trying to move all our apps to EB. 任何帮助都会很好,我们会尝试将所有应用程序移至EB。 but seens that git does not install or something is going on.. I need git on the EB ec2 instance it creates. 但是认为git没有安装或正在发生什么......我需要在它创建的EB ec2实例上使用git。

StackTrace: 堆栈跟踪:

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

UPDATE more info: I decided to log into the instance with ec2-user and notice that git is installed the gems I need ARE installed so far I can see.. when I do bundle list they all show up even the one that the error is complaining about.. I do notice that when I do a general gem list then it DOES not show up... but it should be using the bundle one. 更新更多信息:我决定使用ec2-user登录实例,并注意到git已经安装了我需要安装的宝石到目前为止我可以看到..当我做捆绑列表时,它们都显示出错误的是抱怨..我注意到,当我做一般的宝石清单然后它没有显示...但它应该使用捆绑。

( Note that the following workaround should only be used if you must use Git sources for dependencies. It is recommended not to install dependencies from external Git repositories if it can be avoided. See below for details on why that is. ) 请注意,只有在必须使用Git源作为依赖项时才应使用以下解决方法。如果可以避免,请不要从外部Git存储库安装依赖项。请参阅下面有关原因的详细信息。

When using Git backed libraries in a Gemfile with Passenger, you must disable shared gems in an installation (in addition to installing Git in the hook you listed above). 在带有Passenger的Gemfile中使用Git支持的库时, 必须在安装中禁用共享gem(除了在上面列出的钩子中安装Git)。 You can do this by setting the BUNDLE_DISABLE_SHARED_GEMS Bundler environment variable in your existing .ebextensions/ruby.config file like so: 您可以通过在现有.ebextensions/ruby.config文件中设置BUNDLE_DISABLE_SHARED_GEMS Bundler环境变量来执行此操作,如下所示:

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

packages:
  yum:
    git: []

Disabling shared gems will force all dependencies to be vendored into your application in vendor/bundle as specified by the BUNDLE_PATH variable. 禁用共享gem将强制所有依赖项出现在BUNDLE_PATH变量指定的vendor/bundle应用程序中。

Note that, whenever possible, you should avoid installing public libraries from Git sources with your application. 请注意,只要有可能,您应该避免在应用程序中使用Git源安装公共库。 Using Git for library locations introduces another point of failure for a deployment install, since the Git repository may be temporarily unavailable or even permanently moved. 将Git用于库位置会为部署安装引入另一个故障点,因为Git存储库可能暂时不可用或甚至永久移动。 Also keep in mind that forcing vendored installs in a deployment will cause your Elastic Beanstalk deployments to be much slower on subsequent deploys of an app with the same dependencies. 还要记住,在部署中强制销售安装会导致Elastic Beanstalk部署在具有相同依赖关系的应用程序的后续部署中慢得多。 This is because the libraries will be re-installed at each deploy instead of taking advantage of the system-wide installation that Elastic Beanstalk has Bundler perform by default. 这是因为库将在每次部署时重新安装,而不是利用默认情况下Elastic Beanstalk让Bundler执行的系统范围的安装。

In short, if there is an official RubyGem release of the library in question, you should use that version instead; 简而言之,如果有相关库的官方RubyGem版本,您应该使用该版本; and if not, you should suggest to the library author that an official RubyGem release be made available. 如果没有,您应该向图书馆作者建议提供官方的RubyGem版本。

FYI a similar question about this Git problem with regular Passenger/Rails deployments was previously asked: Rails 3: Passenger can't find git gems installed by bundler 仅供参考FYI关于此Git问题的常规乘客/ Rails部署的类似问题之前被问过: Rails 3:Passenger无法找到由bundler安装的git gem

Another option is to package the gem source directly with your application and then point bundler at that. 另一种选择是直接将gem源与您的应用程序打包在一起,然后将Bundler指向该处理器。

Copy the gem source into vendor/gems/mygem 将gem源复制到vendor / gems / mygem中

Then, in your Gemfile: 然后,在你的Gemfile中:

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

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

Amazon's Elastic Beanstalk Ruby AMI needs a little tweaking in order to allow you to bundle gems from git without sacrificing deployment speed, behavior you get out of the box with Capistrano and Heroku. 亚马逊的Elastic Beanstalk Ruby AMI需要稍微调整一下,以便您可以在不牺牲部署速度的情况下从git捆绑宝石,使用Capistrano和Heroku开箱即用的行为。

Fortunately, the Elastic Beanstalk configuration API makes the necessary tweaks possible without requiring you to maintain a custom AMI. 幸运的是,Elastic Beanstalk配置API可以进行必要的调整,而无需维护自定义AMI。

Here's the Elastic Beanstalk configuration that I use to get the desired, conventional Ruby deployment behavior with Amazon's own AMI: https://github.com/gkop/elastic-beanstalk-ruby . 这是Elastic Beanstalk配置,我用它来获得亚马逊自己的AMI所需的传统Ruby部署行为: https//github.com/gkop/elastic-beanstalk-ruby

  • ok well after lot of research and testing I figure this was related to Amazon having some issues with the passenger env values... 好吧经过大量的研究和测试后,我认为这与亚马逊有关乘客环境价值的一些问题有关...
  • I was able to run manually rails s and then it worked fine and all gems loaded.. but with passenger it did not so find that if I run 我能够手动运行rails s然后它运行良好并且所有宝石都已加载..但是对于乘客它并没有如此发现如果我运行

    bundle pack --all 捆绑包 - 所有

  • --all so it also packs the git gems.. -所以它也包装git宝石..

  • it will then run like a charm.. 它会像魅力一样运行..

  • to be able to have this run in the mean time Amazon fixes this issue with bundle I create a hook and force it to run after every install. 能够在同一时间运行亚马逊用bundle修复这个问题我创建一个钩子并强制它在每次安装后运行。 not the best way but works. 不是最好的方式,但有效。

Note: using the hook I cant seen to run the command on EB updates so I git add the vendor/cache and it uploads it all by default. 注意:使用我无法看到的钩子在EB更新上运行命令,所以我git添加供应商/缓存并默认上传所有。

After trying the accepted answer, I found that a simpler .ebextensions/ruby.config was the only config that worked: 在尝试接受的答案后,我发现更简单的.ebextensions/ruby.config是唯一有效的配置:

packages:
  yum:
    git: []

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM