3

我正在使用eb CLI在AWS上安装我的Rails应用程序。我已经得到了一个测试之前工作,但现在我试图部署我写的一些实际的代码。当我做git aws.push时,更新失败。 “eb logs”命令显示捆绑器失败。AWS Elastic Beanstalk Rails Bundler失败

我上运行的Ruby 2.1(彪马)64位Linux的亚马逊V1.0.0 2014.03

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 

我不叫我的宝石文件bcrypt无论是运行此。它必须是魔法宝石的依赖。

我试图使用供应商/缓存技巧的“捆绑软件包”,但它一直在说AWS上缺少一些宝石。正如你所看到的,我不仅对弹性beanstalk/aws,而且对rails也很新颖,所以我可能只是在做一些完全错误的事情。另外,当我在gemfile.lock中删除bcrypt引用(我肯定会破坏某些东西)时,它只会在(ffi)后面的不同gem上引发相同的错误。我确信有很多宝石,如果我一次只能解决一个问题,它最终会抛出错误。

回答

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

+0

谢谢!当我运行一个无法安装的gem时,我该如何去了解为本地依赖提供了什么? – user3339471 2014-09-06 00:26:03

+0

一些实验将会有所帮助。您可以ssh访问该实例并查看/ var/log中的日志。 – 2014-09-06 00:30:20

8

错误实际上是通过实例运行内存不足造成运行make时:

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

更可能你正在运行一个微型实例 - 把它碰到一个更大的实例大小,它应该可靠地构建。

Rohit在他的回答中说得很对,因为缺少系统软件包通常是导致无法在Elastic Beanstalk中安装宝石的原因。