部署到Elastic Beanstalk失败,出现"无法分配内存"错误

Sam*_*m M 6 ruby-on-rails amazon-web-services amazon-elastic-beanstalk

我构建了一个我想部署到弹性beanstalk的rails应用程序.我能够将其部署到我的AWS账户,但现在我想将其部署到我的客户账户.出于某种原因,我在尝试部署它时遇到错误.能够从头开始将它部署到我的帐户并能够将其部署到heroku,但每次我尝试将其部署到我的客户帐户时,我都会遇到一堆错误.这两个帐户之间是否存在可能的设置?我不明白为什么部署到这两个帐户会有所不同.我尝试了所有可以找到的解决方案.

这是日志.我不确定他们是否会有所帮助

  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...
Run Code Online (Sandbox Code Playgroud)

Wil*_*ill 10

我发现基于博客文章的 @osazemeu的答案需要调整,因为container_commands执行太晚(在应用程序已经设置之后),因此它从未运行过.

我将container_command更改为命令(请参阅此AWS文档以获取有关两者之间差异的详细信息),并且还创建了内联文件而不是单独的.sh文件,因为我不想跟踪哪个目录是在部署时被放入.我调用了该文件01setup_swap.config并将其放在.ebextensions项目根目录中.这对我有用.内容如下:

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/"
Run Code Online (Sandbox Code Playgroud)

  • 你是我的英雄。 (2认同)

小智 2

几天前我遇到了类似的问题,这就是我解决的方法。仅当当前步骤失败时才继续执行下一步。

步骤 1:增加 ElasticBean EC2 实例的交换内存

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
Run Code Online (Sandbox Code Playgroud)

步骤 1.1 在 yourapp/.ebextensions/01_setup_swap.config 中

container_commands:
    01setup_swap:
        command: "bash .ebextensions/swap/setup_swap.sh"
Run Code Online (Sandbox Code Playgroud)

来源:elasticbeanstalk-swap

步骤 2:增加 ElasticBeanstalk 实例的大小,然后尝试再次部署。

步骤 3:如果其他方法均失败,请在 Rails 应用程序中运行此命令。

bundle exec bundle package
Run Code Online (Sandbox Code Playgroud)

这会编译 gem 并将其保存到 Rails 应用程序中的本地文件夹(供应商/缓存)中。该文件夹是部署时访问的,编译时不会有。

将这些文件提交到您的存储库,并尝试部署。它应该可以顺利工作。