text: Q:
  
  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!
  
  A:
  
  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: []
  
  A:
  
  Another reason why nokogiri sometimes fails to compile is that it runs out of memory on low-memory machines.
  
  