乘客使用错误的 ruby 版本

Passenger using wrong ruby version

我在 Apache 上 运行 多个网站,在 CentOS 服务器上安装了 Passenger 4.0.45。我也使用 rvm 1.25.27 安装了多个 ruby 版本,在过去的 3 年里,我使用的是 Ruby 2.1.2 版本。 我现在已经使用 Rails 5.1 启动了一个新应用程序,我需要安装 Ruby 2.4.2。部署我的应用程序后,我得到一个 Internal Server Error,这是我在错误日志中遇到的错误:

App 10033 stderr: /usr/local/rvm/gems/ruby-2.1.2@rails-4.0/gems/passenger-4.0.45/lib/phusion_passenger/request_handler.rb:356:in `trap'
App 10033 stderr: :
App 10033 stderr: Invalid argument - SIGKILL
App 10033 stderr:  (
App 10033 stderr: Errno::EINVAL
App 10033 stderr: )

我注意到显示的 ruby 版本是 ruby-2.1.2@rails-4.0 我认为它应该是 2.4.2 因为这是我在 VirtualHost 文件中指定的版本:

<VirtualHost *:80>
   ServerName example.com
   DocumentRoot /.../current/public
   PassengerRuby /home/user/.rvm/wrappers/ruby-2.4.2@global/ruby
   <Directory 
        /home/user/.../current/public>
        AllowOverride all
        Options -MultiViews
  </Directory>
</VirtualHost>

我在 https://github.com/phusion/passenger/issues/1362 上读到了这个错误,但我不知道我是否可以更新 Passenger 而不会弄乱我是 运行 旧版本 Ruby 的其他网站].

我找到了问题的答案。我会解释我做了什么:

  • rvm install 2.4.2(安装Ruby版本2.4.2)
  • rvm use 2.4.2(使用Ruby2.4.2版本)
  • gem安装乘客(安装乘客gem)
  • passenger-install-apache2-module(这将指导您完成 Apache 的 Passenger 模块的安装。大约需要 3 分钟)
  • 在 Passenger 模块安装完成后,我用安装摘要指定的新 LoadModulePassengerRoot 更新了我的 httpd.conf 文件)
  • rvmsudo passenger-config validate-install(检查 Passenger 是否安装正确)
  • sudo service httpd restart(重启 Apache)

执行上述命令后,我的 Rails 5.1 新应用程序在较低 Ruby/Rails 版本上与服务器 运行 中的所有其他站点一样工作。