Nokogiri安装在Elastic Beanstalk上失败

我试图用AWS Elastic Beanstalk部署我的Rails应用程序。 我已经创建了实例,但是当我尝试使用aws.push部署应用程序时,我在事件日志中遇到以下错误:

 2014-09-22 01:23:40 UTC+0550 ERROR [Instance: i-744edb4a Module: AWSEBAutoScalingGroup ConfigSet: null] Command failed on instance. Return code: 1 Output: Error occurred during build: Command hooks failed . 2014-09-22 01:23:39 UTC+0550 ERROR Script /opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.sh failed with returncode 5 

我拉了日志,发现nokogiri gem的安装失败并出现错误:

 ------------------------------------- /var/log/directory-hooks-executor.log ------------------------------------- Using mail 2.5.4 Using actionmailer 4.0.2 Using active_utils 2.2.1 Using json 1.8.1 Using money 6.1.1 Using mini_portile 0.6.0 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. /usr/bin/ruby1.9 extconf.rb Building nokogiri using packaged libraries. checking for iconv.h... yes checking for iconv_open() in iconv.h... yes Building libxml2-2.8.0 for nokogiri with the following patches applied: - 0001-Fix-parser-local-buffers-size-problems.patch - 0002-Fix-entities-local-buffers-size-problems.patch - 0003-Fix-an-error-in-previous-commit.patch - 0004-Fix-potential-out-of-bound-access.patch - 0005-Detect-excessive-entities-expansion-upon-replacement.patch - 0006-Do-not-fetch-external-parsed-entities.patch - 0007-Enforce-XML_PARSER_EOF-state-handling-through-the-pa.patch - 0008-Improve-handling-of-xmlStopParser.patch - 0009-Fix-a-couple-of-return-without-value.patch - 0010-Keep-non-significant-blanks-node-in-HTML-parser.patch - 0011-Do-not-fetch-external-parameter-entities.patch ************************************************************************ IMPORTANT! Nokogiri builds and uses a packaged version of libxml2. If this is a concern for you and you want to use the system library instead, abort this installation process and reinstall nokogiri as follows: gem install nokogiri -- --use-system-libraries If you are using Bundler, tell it to use the option: bundle config build.nokogiri --use-system-libraries bundle install However, note that nokogiri does not necessarily support all versions of libxml2. For example, libxml2-2.9.0 and higher are currently known to be broken and thus unsupported by nokogiri, due to compatibility problems and XPath optimization bugs. ************************************************************************ Extracting libxml2-2.8.0.tar.gz into tmp/x86_64-redhat-linux-gnu/ports/libxml2/2.8.0... OK Running patch with /usr/local/share/gems1.9/gems/nokogiri-1.6.2.1/ports/patches/libxml2/0001-Fix-parser-local-buffers-size-problems.patch... Running 'patch' for libxml2 2.8.0... ERROR, review 'tmp/x86_64-redhat-linux-gnu/ports/libxml2/2.8.0/patch.log' to see what happened. *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/ --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/usr/bin/ruby1.9 --help --clean --use-system-libraries --enable-static --disable-static --with-zlib-dir --without-zlib-dir --with-zlib-include --without-zlib-include=${zlib-dir}/include --with-zlib-lib --without-zlib-lib=${zlib-dir}/lib --enable-cross-build --disable-cross-build /usr/local/share/gems1.9/gems/mini_portile-0.6.0/lib/mini_portile.rb:279:in `block in execute': Failed to complete patch task (RuntimeError) from /usr/local/share/gems1.9/gems/mini_portile-0.6.0/lib/mini_portile.rb:271:in `chdir' from /usr/local/share/gems1.9/gems/mini_portile-0.6.0/lib/mini_portile.rb:271:in `execute' from extconf.rb:282:in `block in patch' from extconf.rb:279:in `each' from extconf.rb:279:in `patch' from /usr/local/share/gems1.9/gems/mini_portile-0.6.0/lib/mini_portile.rb:108:in `cook' from extconf.rb:253:in `block in process_recipe' from extconf.rb:154:in `tap' from extconf.rb:154:in `process_recipe' from extconf.rb:419:in `' extconf failed, exit code 1 Gem files will remain installed in /usr/local/share/gems1.9/gems/nokogiri-1.6.2.1 for inspection. Results logged to /usr/local/lib64/gems1.9/exts/nokogiri-1.6.2.1/gem_make.out An error occurred while installing nokogiri (1.6.2.1), and Bundler cannot continue. Make sure that `gem install nokogiri -v '1.6.2.1'` succeeds before bundling. 2014-09-21 19:53:39,643 [ERROR] (321 MainThread) [directoryHooksExecutor.py-33] [root directoryHooksExecutor error] Script /opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.sh failed with returncode 5 

我已将以下内容添加到.ebextensions/packages.conf文件中:

 packages: yum: postgresql-devel: [] git: [] gcc: [] libxml2: [] libxml2-devel: [] libxslt: [] libxslt-devel: [] 

我需要做任何其他事情才能安装nokogiri吗? 我错过了什么吗?

谢谢!

我能够通过在要安装的软件包列表中包含patch来解决这个问题:)

像这样:

 packages: yum: postgresql-devel: [] git: [] patch: [] 

nokogiri有时无法编译的另一个原因是它在低内存机器上耗尽了内存。

Nokogiri需要libxml2和libxslt。 在运行gem install nokogiri或bundle install之前,请确保已安装两者。

即ubuntu服务器将使用apt-get或aptitude安装这些服务器