为什么我的Rails App无法部署到AWS Elastic Beanstalk?

时间:2019-03-03 06:21:33

标签: ruby-on-rails ruby amazon-web-services amazon-elastic-beanstalk

当我将应用程序部署到他们的服务时,AWS Elastic Beanstalk从不接受我的应用程序。我试图通过阅读日志来解决所有问题,但似乎没有任何效果。我的开发IDE是 Rubymine / ruby​​ 2.4.5 / Rails 5.2.0 / Windows 10 Pro x64 / < strong> Bundler版本1.16.4 。我收到的错误如下。如何将应用程序成功部署到AWS Elastic Beanstalk? 在开发中,无论如何都不会启动应用程序。我试图以尽可能少的依赖项启动该应用程序。我清除了资产缓存。我删除了不必要的文件。似乎没有什么能满足Elastic Beanstalk。 (这是我第一次使用该服务)

一个笔记:我正在为此特定应用使用动作电缆

database.yml

production:
  adapter: postgresql
  encoding: utf8
  database: <%= ENV['RDS_DB_NAME'] %>
  username: <%= ENV['RDS_USERNAME'] %>
  password: <%= ENV['RDS_PASSWORD'] %>
  host: <%= ENV['RDS_HOSTNAME'] %>
  port: <%= ENV['RDS_PORT'] %>

cable.yml

development:
  adapter: async

test:
  adapter: async

production:
  adapter: postgresql
  url: <%= ENV["REDIS_URL"] %>
  channel_prefix: <%= ENV['CABLE_CHANNEL_PREFIX'] %>

宝石

ruby 2.4.5p335 (2018-10-18 revision 65137) [x64-mingw32]

错误日志

-------------------------------------
/var/log/eb-commandprocessor.log
-------------------------------------
  gem 'loofah-activerecord'

  # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
  gem 'bootsnap', '>= 1.1.0', require: false
  gem 'rails', '5.2.0' # '~>5.1.1' 5.1.6
  # Use postgresql as the database for Active Record
  #gem 'derailed_benchmarks', group: :development

  gem 'pg', '~> 1.1', '>= 1.1.4'
  gem 'puma', '~> 2.16'


  # Use SCSS for stylesheets
  gem 'sass-rails'
  # Use Uglifier as compressor for JavaScript assets
  gem 'uglifier', '~> 4.1', '>= 4.1.20'

  # See https://github.com/rails/execjs#readme for more supported runtimes
  # gem 'therubyracer', platforms: :ruby

  # Use CoffeeScript for .coffee assets and views
  gem 'coffee-rails', '~> 4.2'
  # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
  # gem 'turbolinks', '~> 5'
  # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
  gem 'jbuilder', '~> 2.5'
  # Use Redis adapter to run Action Cable in production
  gem 'redis'

  # Use ActiveModel has_secure_password
  # gem 'bcrypt', '~>3.1.11', platforms: [:ruby, :x64_mingw, :mingw]
  #gem 'bcrypt', git: 'https://github.com/codahale/bcrypt-ruby.git', require: 'bcrypt'
  gem 'bcrypt', '~> 3.1', '>= 3.1.12'
  # Use Capistrano for deployment
  # gem 'capistrano-rails', group: :development

  group :test do
    gem 'capybara', '~> 2.15', '>= 2.15.4'
    gem 'factory_bot_rails', '~> 4.0'
    gem 'guard-rspec'
    gem 'rspec-rails', '~> 3.4', '>= 3.4.2'
    gem 'rubocop-rspec'
    gem 'stripe-ruby-mock', '~> 2.5.4', require: 'stripe_mock'
    gem 'webmock'
  end

  group :development do
    # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
    gem 'web-console', '>= 3.3.0'
  end

  # Windows does not include zoneinfo files, so bundle the tzinfo-data gem


  platform :mswin, :mingw, :x64_mingw do
    gem 'tzinfo-data'
    gem 'byebug', platforms: %i[mri mingw x64_mingw], group: :development
  end


  gem 'rubocop', require: false
  + '[' -d /var/app/ondeck/vendor/cache ']'
  + bundle install --deployment --local
  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.
  Your bundle only supports platforms ["x64-mingw32"] but your local platforms are
   ["ruby", "x86_64-linux"], and there's no compatible match between those two lists. (Executor::NonZeroExitStatus)

[2019-03-03T05:36:01.585Z] ERROR [27678] : Command CMD-AppDeploy failed!
[2019-03-03T05:36:01.586Z] INFO  [27678] : Command processor returning results: 
{"status":"FAILURE","api_version":"1.0","results":[{"status":"FAILURE","msg":"(TRUNCATED)...ling your bundle as root will break this application for all non-root\nusers on this machine.\nYour bundle only supports platforms [\"x64-mingw32\"] but your local platforms are\n[\"ruby\", \"x86_64-linux\"], and there's no compatible match between those two\nlists. \nHook /opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI","returncode":16,"events":[]}],"truncated":"true"}
[2019-03-03T05:39:21.557Z] DEBUG [27906] : Reading config file: /etc/elasticbeanstalk/.aws-eb-stack.properties
[2019-03-03T05:39:21.557Z] DEBUG [27906] : Checking if the command processor should execute...
[2019-03-03T05:39:21.559Z] DEBUG [27906] : Checking whether the command is applicable to instance (i-02c427cad88fc3a3e)..
[2019-03-03T05:39:21.559Z] INFO  [27906] : Command is applicable to this instance (i-02c427cad88fc3a3e)..
[2019-03-03T05:39:21.559Z] DEBUG [27906] : Checking if the received command stage is valid..
[2019-03-03T05:39:21.559Z] INFO  [27906] : No stage_num in command. Valid stage..
[2019-03-03T05:39:21.560Z] INFO  [27906] : Received command CMD-TailLogs: {"execution_data"=>"*", "instance_ids"=>["i-02c43eeewfefwfw"], "data"=>"betetet--reeetetetete5", "command_name"=>"CMD-TailLogs", "api_version"=>"1.0", "resource_name"=>"AWSEBAutoScalingGroup", "request_id"=>"b100000-2222-2222-2222-22222222"}
[2019-03-03T05:39:21.560Z] INFO  [27906] : Command processor should execute command.
[2019-03-03T05:39:21.560Z] DEBUG [27906] : Storing current stage..
[2019-03-03T05:39:21.560Z] DEBUG [27906] : Stage_num does not exist. Not saving null stage. Returning..
[2019-03-03T05:39:21.560Z] DEBUG [27906] : Reading config file: /etc/elasticbeanstalk/.aws-eb-stack.properties
[2019-03-03T05:39:21.560Z] DEBUG [27906] : Retrieving metadata for key: AWS::ElasticBeanstalk::Ext||_ContainerConfigFileContent||commands..
[2019-03-03T05:39:21.560Z] DEBUG [27906] : Retrieving metadata for key: AWS::ElasticBeanstalk::Ext||_API||_Commands..
[2019-03-03T05:39:21.561Z] INFO  [27906] : Found enabled addons: 
["logstreaming", "logpublish"].
[2019-03-03T05:39:21.562Z] INFO  [27906] : Updating Command definition of addon logstreaming.
[2019-03-03T05:39:21.562Z] INFO  [27906] : Updating Command definition of addon logpublish.
[2019-03-03T05:39:21.562Z] DEBUG [27906] : Loaded definition of Command CMD-TailLogs.
[2019-03-03T05:39:21.562Z] INFO  [27906] : Executing CMD-TailLogs
[2019-03-03T05:39:21.562Z] INFO  [27906] : Executing command: CMD-TailLogs...
[2019-03-03T05:39:21.562Z] INFO  [27906] : Executing command CMD-TailLogs activities...
[2019-03-03T05:39:21.562Z] DEBUG [27906] : Setting environment variables..
[2019-03-03T05:39:21.562Z] INFO  [27906] : Running AddonsBefore for command CMD-TailLogs...
[2019-03-03T05:39:21.563Z] DEBUG [27906] : Running stages of Command CMD-TailLogs from stage 0 to stage 0...
[2019-03-03T05:39:21.563Z] INFO  [27906] : Running stage 0 of command CMD-TailLogs...
[2019-03-03T05:39:21.563Z] DEBUG [27906] : Loaded 1 actions for stage 0.
[2019-03-03T05:39:21.563Z] INFO  [27906] : Running 1 of 1 actions: TailLogs...

2 个答案:

答案 0 :(得分:2)

您的Gemfile.lock是在Windows(x64-mingw32平台)上生成的,并且包含与Linux不兼容的gem版本。但是Amazon仅支持rubyx86_64-linux平台。

Your bundle only supports platforms ["x64-mingw32"] but your local platforms are
["ruby", "x86_64-linux"], and there's no compatible match between those two lists.

这基本上意味着您无法在Linux计算机(或Mac)上完全使用当前的Gemfile.lock。您将需要在该OS上运行bundle update(而不是bundle install),以允许捆绑程序找到一组新的匹配的gem版本。

这是有一定风险的,因为这样一来,您可能会在生产系统上而不是在开发环境中运行其他gem版本,因此建议在部署时实际切换到新版本之前再次运行测试。

当您计划定期使用Ruby on Rails应用程序时,建议您切换到Linux作为本地开发环境。您可以选择在虚拟机中或通过docker使用Linux。

答案 1 :(得分:0)

尽管您可能应该使用某种虚拟机为生产环境开发红宝石/导轨,但现在尝试在gemfile中进行更改:

group :development do
  gem 'byebug'
  gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby]
  gem 'web-console', '>= 3.3.0'
  gem 'rubocop', require: false
end

您可以删除它以测试您的部署:

platform :mswin, :mingw, :x64_mingw do
  gem 'tzinfo-data'
  gem 'byebug', platforms: %i[mri mingw x64_mingw], group: :development
end

您只需要在开发中使用rubocop,因此也可以将其移动到开发块中。

然后运行

bundle install

然后再次尝试部署