Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nokogiri installation failes on Elastic Beanstalk

Im trying to deploy my Rails application with AWS Elastic Beanstalk. I've created the instance and all but when I try to deploy the app using aws.push I get the following errors in the event log:

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

I pulled the logs and found that the installation of nokogiri gem had failed with the error:

-------------------------------------
/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 `<main>'

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

I have added the following into the file .ebextensions/packages.conf:

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

DO I need to do anything else to make nokogiri install? Am I missing something?

Thanks!

like image 706
Steve Robinson Avatar asked Dec 08 '22 06:12

Steve Robinson


2 Answers

I was able to fix this issue by including patch in the list of packages to be installed :)

like so:

packages:
  yum:
    postgresql-devel: []
    git: []
    patch: []
like image 114
Steve Robinson Avatar answered Dec 11 '22 08:12

Steve Robinson


Another reason why nokogiri sometimes fails to compile is that it runs out of memory on low-memory machines.

like image 24
johnnyb Avatar answered Dec 11 '22 09:12

johnnyb