我正在尝试将 Elastic beanstalk 应用从 Puma 迁移到 Phusion Passenger。但是,Passenger 启动时失败并显示以下错误:
/opt/elasticbeanstalk/support/conf/nginx_config.erb:48:in `block in write_nginx_config_file': undefined local variable or method `location_config_filename' for #<PhusionPassenger::Standalone::StartCommand:0x007f1eb35d06f0> (NameError)
from /opt/rubies/ruby-2.2.2/lib/ruby/2.2.0/erb.rb:863:in `eval'
from /opt/rubies/ruby-2.2.2/lib/ruby/2.2.0/erb.rb:863:in `result'
from /opt/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/passenger-5.0.15/lib/phusion_passenger/standalone/start_command/nginx_engine.rb:120:in `block in write_nginx_config_file'
Amazon 堆栈名称为:
64bit Amazon Linux 2015.03 v2.0.0 running Ruby 2.2 (Passenger Standalone)
同一个应用程序可以在本地和 Heroku 上使用 Passenger 运行。(它也可以与 Puma 一起顺利运行)。
我是否遗漏了必需的配置文件或配置选项?
(我使用 eb_deployer 进行蓝绿部署而不是 AWS 控制台 - 因此它可能是某个地方的默认设置)。
答案1
我遇到了同样的问题,经过一番挖掘,我发现 Amazon 使用的乘客版本
64位 Amazon Linux 2015.03 v2.0.0
是乘客4.0.59。
如果您gem "passenger"
在 gemfile 中没有指定版本,则您的应用程序将安装 v5.0 或更新版本,这与 EBS 设置相冲突。他们在 4.0.59 和 5.0 之间所做的任何更改似乎都搞乱了部署,因为当我在 gemfile 中设置版本并重新部署时,它就起作用了。
gem "passenger", '~> 4.0.59'
更新 gemfile 并推送代码后,请确保终止实例以获取新实例。部署后,检查 eb-activity.log 中的行
使用乘客 4.0.59
编辑:正如 Chris 在下面指出的那样,您不需要在 gem 文件中包括 Passenger,因为它已经包含在内。这将完全避免出现此问题,无需担心版本问题。
gem "passenger ", group: :development