AWS ElasticBeanstalk:提前终止工作人员 [puma] 正在加载开发 - 宝石?

AWS ElasticBeanstalk:提前终止工作人员 [puma] 正在加载开发 - 宝石?

我目前正在将 rails 从 6 升级到 7,因此也必须升级我的 eb 平台版本(以运行 ruby​​-3.0)。

现在 Puma 无法启动并且总是循环:

[13033] + Gemfile in context: /var/app/current/Gemfile
[13033] ! Unable to start worker
[13033] /opt/rubies/ruby-3.0.3/lib/ruby/site_ruby/3.0.0/bundler/runtime.rb:309:in `check_for_activated_spec!'
[13033] Early termination of worker
[13035] + Gemfile in context: /var/app/current/Gemfile
[13035] ! Unable to start worker
[13035] /opt/rubies/ruby-3.0.3/lib/ruby/site_ruby/3.0.0/bundler/runtime.rb:309:in `check_for_activated_spec!'
[13035] Early termination of worker
[13037] + Gemfile in context: /var/app/current/Gemfile

当我尝试手动启动时,它会尝试加载来自开发组的所有宝石(当然不可用)但是为什么呢?!

$ bundle exec puma -p 3000 -e production
Could not find byebug-11.1.3, rspec-rails-3.9.1, graphiql-rails-1.8.0, spring-2.1.1, spring-watcher-listen-2.0.1, rack-cors-1.1.1, annotate-3.2.0, letter_opener-1.8.0, rspec-core-3.9.3, rspec-expectations-3.9.4, rspec-mocks-3.9.1, rspec-support-3.9.4, sprockets-rails-3.4.2, listen-3.7.1, launchy-2.5.0, diff-lcs-1.5.0, sprockets-4.0.3, rb-fsevent-0.11.1, rb-inotify-0.10.1, addressable-2.8.0, public_suffix-4.0.6 in any of the sources
Run `bundle install` to install missing gems.

RAILS_ENV/RACK_ENV 肯定已设置为生产...

有任何想法吗? :)

更新:

环境变量(通过 aws-eb 控制台正确设置)在 shell 会话 (eb ssh) 中不可用。这是正常现象吗?

答案1

这是因为您的 eb 环境上运行的 puma 版本与您的应用程序或 Gemfile 中运行的 puma 版本不匹配。

要在您的 eb 环境上运行 puma 版本:

eb ssh <environment>
puma -V

确保此版本与您的 Gemfile 中的版本相匹配。

至于为什么环境变量没有在您的 shell 中运行。您需要添加一个 ebextension 来进行设置。下面是一个您可以在 .ebextensions 中创建的文件,用于自动将您的环境变量加载到您的 shell 会话中。

    # .ebextensions/setenvvars.config
commands:
  setvars:
    command: /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export \(.key)=\"\(.value)\""' > /etc/profile.d/eb_envvars.sh
packages:
  yum:
    jq: []

相关内容