Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deployment to Elastic Beanstalk fails with 'Cannot allocate memory' error

I built a rails application that I want to deploy to elastic beanstalk. I was able to deploy it to my AWS account but now I want to deploy it to my clients account. For some reason it I get errors when trying to deploy it. Have been able to deploy it to my account from scratch and been able to deploy it to heroku but every time I try to deploy it to my clients account I get a bunch of errors. Are there possible settings that would be different between the two accounts? I don't understand why deploying to the two accounts would be any different. I have tried every solution I could find.

Here are the logs. I am not sure if they will help

  gem 'bootstrap-sass'
  gem 'autoprefixer-rails'
  gem 'puma'

  group :development, :test do
    gem "letter_opener"
    gem 'byebug'
  end

  group :development do
    gem 'web-console', '~> 2.0'
    gem 'spring'
  end

  group :production do
    # gem 'pg'
    gem 'rails_12factor'
  end
  + '[' -d /var/app/ondeck/vendor/cache ']'
  + bundle install
  Don't run Bundler as root. Bundler can ask for sudo if it is needed, and
  installing your bundle as root will break this application for all non-root
  users on this machine.
  Warning: the running version of Bundler is older than the version that created the lockfile. We sugg
est you upgrade to the latest version of Bundler by running `gem install bundler`.
  Fetching gem metadata from https://rubygems.org/
  Fetching version metadata from https://rubygems.org/
  Fetching dependency metadata from https://rubygems.org/
  Using rake 11.1.2
  Using i18n 0.7.0
  Installing json 1.8.3 with native extensions

  Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

      /opt/rubies/ruby-2.2.5/bin/ruby -r ./siteconf20160708-498-1pc5aw8.rb extconf.rb
  Cannot allocate memory - /opt/rubies/ruby-2.2.5/bin/ruby -r ./siteconf20160708-498-1pc5aw8.rb extcon
f.rb 2>&1

  Gem files will remain installed in /opt/rubies/ruby-2.2.5/lib/ruby/gems/2.2.0/gems/json-1.8.3 for in
spection.
  Results logged to /opt/rubies/ruby-2.2.5/lib/ruby/gems/2.2.0/extensions/x86_64-linux/2.2.0-static/js
on-1.8.3/gem_make.out
  Using minitest 5.9.0
  Using thread_safe 0.3.5
  Using builder 3.2.2
  Using erubis 2.7.0
  Using mini_portile2 2.1.0
  Using pkg-config 1.1.7
  Using rack 1.6.4
  Using mime-types-data 3.2016.0521
  Using arel 6.0.3
  Using execjs 2.7.0
  Installing bcrypt 3.1.10 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

      /opt/rubies/ruby-2.2.5/bin/ruby -r ./siteconf20160708-498-myt7e8.rb extconf.rb
  Cannot allocate memory - /opt/rubies/ruby-2.2.5/bin/ruby -r ./siteconf20160708-498-myt7e8.rb extconf.rb 2>&1

  Gem files will remain installed in /opt/rubies/ruby-2.2.5/lib/ruby/gems/2.2.0/gems/bcrypt-3.1.10 for inspection.
  Results logged to /opt/rubies/ruby-2.2.5/lib/ruby/gems/2.2.0/extensions/x86_64-linux/2.2.0-static/bcrypt-3.1.10/gem_make.out
  Using sass 3.4.22
  Using coffee-script-source 1.10.0
  Using thor 0.19.1
  Using concurrent-ruby 1.0.2
  Using multi_json 1.12.1
  Using libv8 3.16.14.15
  Installing puma 3.4.0 with native extensions

  Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

      /opt/rubies/ruby-2.2.5/bin/ruby -r ./siteconf20160708-498-kv1g4s.rb extconf.rb
  Cannot allocate memory - /opt/rubies/ruby-2.2.5/bin/ruby -r ./siteconf20160708-498-kv1g4s.rb extconf.rb 2>&1

  Gem files will remain installed in /opt/rubies/ruby-2.2.5/lib/ruby/gems/2.2.0/gems/puma-3.4.0 for inspection.
  Results logged to /opt/rubies/ruby-2.2.5/lib/ruby/gems/2.2.0/extensions/x86_64-linux/2.2.0-static/puma-3.4.0/gem_make.out
  Using bundler 1.12.1
  Using rails_serve_static_assets 0.0.5
  Using rails_stdout_logging 0.0.4
  Using ref 2.0.0
  Using tilt 2.0.5
  Installing sqlite3 1.3.11 with native extensions

  Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

      /opt/rubies/ruby-2.2.5/bin/ruby -r ./siteconf20160708-498-5lnc3v.rb extconf.rb
  Cannot allocate memory - /opt/rubies/ruby-2.2.5/bin/ruby -r ./siteconf20160708-498-5lnc3v.rb extconf.rb 2>&1

  Gem files will remain installed in /opt/rubies/ruby-2.2.5/lib/ruby/gems/2.2.0/gems/sqlite3-1.3.11 for inspection.
  Results logged to /opt/rubies/ruby-2.2.5/lib/ruby/gems/2.2.0/extensions/x86_64-linux/2.2.0-static/sqlite3-1.3.11/gem_make.out
  An error occurred while installing json (1.8.3), and Bundler cannot continue.
  Make sure that `gem install json -v '1.8.3'` succeeds before bundling. (Executor::NonZeroExitStatus)


[2016-07-08T19:47:55.300Z] INFO  [424]   - [Application update app-d3f5-160708_124551@2/AppDeployStage0/AppDeployPreHook/10_bundle_install.sh] : Activity failed.
[2016-07-08T19:47:55.301Z] INFO  [424]   - [Application update app-d3f5-160708_124551@2/AppDeployStage0/AppDeployPreHook] : Activity failed.
[2016-07-08T19:47:55.301Z] INFO  [424]   - [Application update app-d3f5-160708_124551@2/AppDeployStage0] : Activity failed.
[2016-07-08T19:47:55.302Z] INFO  [424]   - [Application update app-d3f5-160708_124551@2] : Completed activity. Result:
  Application update - Command CMD-AppDeploy failed
[2016-07-08T20:17:06.267Z] INFO  [1271]  - [CMD-TailLogs] : Starting activity...
[2016-07-08T20:17:06.268Z] INFO  [1271]  - [CMD-TailLogs/AddonsBefore] : Starting activity...
[2016-07-08T20:17:06.268Z] INFO  [1271]  - [CMD-TailLogs/AddonsBefore] : Completed activity.
[2016-07-08T20:17:06.268Z] INFO  [1271]  - [CMD-TailLogs/TailLogs] : Starting activity...
[2016-07-08T20:17:06.268Z] INFO  [1271]  - [CMD-TailLogs/TailLogs/TailLogs] : Starting activity...
like image 647
Sam M Avatar asked Jul 08 '16 20:07

Sam M


People also ask

Why can't I create the AWS Elastic Beanstalk application version?

Use rolling deployments to minimize the effect of deployments on your production environments. Event: Failed to create the AWS Elastic Beanstalk application version Your application source bundle may be too large, or you may have reached the application version quota.

What can I do about Elastic Beanstalk configuration issues?

Messages from Elastic Beanstalk about deployment, load, and configuration issues often appear here. Review recent environment change history . Change history lists all of the configuration changes made to your environments and includes other information, such as which IAM user made changes and which configuration parameters were set.

Where can I find error messages in Elastic Beanstalk?

Error messages can appear as events on the environment management page in the console, in logs, or on the health page. If the health of your environment changes to red, try the following: Review recent environment events. Messages from Elastic Beanstalk about deployment, load, and configuration issues often appear here.

Is there any downtime with Elastic Beanstalk?

Because Elastic Beanstalk uses a drop-in upgrade process, there might be a few seconds of downtime. Use rolling deployments to minimize the effect of deployments on your production environments. Event: Failed to create the AWS Elastic Beanstalk application version


2 Answers

I found that the answer from @osazemeu based on the blog article needed a tweak, because the container_commands execute too late (after the application was already set up), and thus it was never run.

I changed the container_command into a command (see this AWS documentation for detail on the difference between the two), and also created the file inline rather than having a separate .sh file since I didnt want to have to keep track of what directory that was being put in at deployment time. I called the file 01setup_swap.config and placed in the directory .ebextensions in the root of my project. This did the trick for me. The contents is as follows:

files:
  "/home/ec2-user/setup_swap.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash
      # based on http://steinn.org/post/elasticbeanstalk-swap/

      SWAPFILE=/var/swapfile
      SWAP_MEGABYTES=2048

      if [ -f $SWAPFILE ]; then
        echo "Swapfile $SWAPFILE found, assuming already setup"
        exit;
      fi

      /bin/dd if=/dev/zero of=$SWAPFILE bs=1M count=$SWAP_MEGABYTES
      /bin/chmod 600 $SWAPFILE
      /sbin/mkswap $SWAPFILE
      /sbin/swapon $SWAPFILE

commands:
  01setup_swap:
    command: "bash setup_swap.sh"
    cwd: "/home/ec2-user/"
like image 155
Will Avatar answered Oct 03 '22 06:10

Will


I encountered similar issues a couple of days back and this was how I solved it. Only proceed to the next step if the present step fails.

Step 1: Increase the swap memory of your ElasticBean EC2 instance

yourapp/.ebextensions/setup_swap.sh
#!/bin/bash

SWAPFILE=/var/swapfile
SWAP_MEGABYTES=2048

if [ -f $SWAPFILE ]; then
        echo "Swapfile $SWAPFILE found, assuming already setup"
        exit;

/bin/dd if=/dev/zero of=$SWAPFILE bs=1M count=$SWAP_MEGABYTES
/bin/chmod 600 $SWAPFILE
/sbin/mkswap $SWAPFILE
/sbin/swapon $SWAPFILE

Step 1.1 In your yourapp/.ebextensions/01_setup_swap.config

container_commands:
    01setup_swap:
        command: "bash .ebextensions/swap/setup_swap.sh"

source: elasticbeanstalk-swap

Step 2: Increase the size of your ElasticBeanstalk instance, and try to deploy again.

Step 3: If all else fails, run this command in your rails app.

bundle exec bundle package

This compiles the gems and saves it to a local folder (vendor/cache) in your rails app. This folder is accessed during deployment, and there will be no for compilation.

Commit these files to your repo, and attempt to deploy. It should work without hitches.

like image 27
osazemeu Avatar answered Oct 03 '22 06:10

osazemeu