AWS Elastic Beanstalk Rails Bundler失败

时间:2014-09-03 00:36:22

标签: ruby-on-rails amazon-web-services gem bundler elastic-beanstalk

我使用eb CLI在AWS上安装我的rails应用程序。我之前已经有一个测试工作,但现在我正在尝试部署我编写的一些实际代码。当我执行git aws.push时,更新失败。 " eb日志"命令显示捆绑器失败。

我在运行Ruby 2.1(Puma)的 64位Amazon Linux 2014.03 v1.0.0上运行

Fetching source index from https://rubygems.org/
Using rake (10.3.2) 
Using i18n (0.6.11) 
Using minitest (4.7.5) 
Using multi_json (1.10.1) 
Using thread_safe (0.3.4) 
Using tzinfo (0.3.41) 
Using activesupport (4.0.8) 
Using builder (3.1.4) 
Using erubis (2.7.0) 
Using rack (1.5.2) 
Using rack-test (0.6.2) 
Using actionpack (4.0.8) 
Using mime-types (1.25.1) 
Using polyglot (0.3.5) 
Using treetop (1.4.15) 
Using mail (2.5.4) 
Using actionmailer (4.0.8) 
Using activemodel (4.0.8) 
Using active_model_serializers (0.9.0) 
Using activerecord-deprecated_finders (1.0.3) 
Using arel (4.0.2) 
Using activerecord (4.0.8) 
Using addressable (2.3.6) 
Using execjs (2.2.1) 
Using autoprefixer-rails (3.0.1.20140826) 
Installing bcrypt (3.1.7) 
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /opt/rubies/ruby-2.1.2/bin/ruby extconf.rb 
Cannot allocate memory - /opt/rubies/ruby-2.1.2/bin/ruby extconf.rb  2>&1

Gem files will remain installed in /opt/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/bcrypt-3.1.7 for inspection.
Results logged to /opt/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0-static/bcrypt-3.1.7/gem_make.out
An error occurred while installing bcrypt (3.1.7), and Bundler cannot continue.
Make sure that `gem install bcrypt -v '3.1.7'` succeeds before bundling.

2014-09-03 00:22:36,561 [ERROR] (3331 MainThread) [directoryHooksExecutor.py-33] [root directoryHooksExecutor error] Script /opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.sh failed with returncode 5

我也没有在我的gem文件中调用bcrypt。它必须是巫术宝石的依赖。

我试图使用"捆绑包"对于供应商/缓存技巧,但它一直说AWS上缺少一些宝石。正如你所知,我不仅对弹性beanstalk / aws而且对rails也很新,所以我可能只是做了一些完全错误的事情。

另外,当我删除gemfile.lock中的bcrypt引用(我肯定会破坏某些东西)时,它会在稍后的(ffi)上在不同的gem上抛出相同的错误。我确定有很多宝石,如果我只是设法一次修复一个宝石,它最终会引发错误。

2 个答案:

答案 0 :(得分:8)

该错误实际上是由运行make:

时实例内存不足引起的
Cannot allocate memory - /opt/rubies/ruby-2.1.2/bin/ruby extconf.rb  2>&1

您运行微型实例的可能性很大 - 将其提升到更大的实例大小,并且应该可靠地构建。

Rohit是正确的,但在他的回答中,缺少系统包通常是导致Gems无法在Elastic Beanstalk中安装的原因。

答案 1 :(得分:1)

因此gem install bcrypt -v '3.1.7'所需的C库可能存在一些依赖关系。您可以使用yum和ebextensions安装本机依赖项。

您可以使用ebextensions安装gem install所需的yum包以成功。在您的应用源中创建一个名为.ebextensions/01-yum.config的文件,并将以下内容放入其中。

packages: 
  yum:
    <required-native-dependency>: []

此文件采用YAML格式,因此缩进非常重要。

在此处阅读有关ebextensions的pacakges部分的更多信息:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-packages