启动 Web 应用程序时出错 - Passenger,Rails,Raspberry PI

Error starting web application - Passenger, Rails, Raspberry PI

我有一个 ROR 应用程序(版本 6.1.4.1),Ruby 2.7.4 在具有 4 GB RAM 和 32 GB SD 卡的 Raspberry Pi 4 上。我使用 tarball 安装安装了 Passenger 6.0.12,并使用 nginx 运行 连接它。 passenger start 在 app 目录中成功运行,但是当我尝试 运行 将其与端口 80 上的 nginx (/opt/nginx/sbin/nginx) 连接时,访问该站点时出现上述错误。

我正在通过 IP 地址访问应用程序,该地址在 nginx.conf 中配置,应用程序安装在 /home/pi/src/bogie_can 中。在 app 目录中有一个 .bundle 目录和一个配置文件,这是安装 gems 的地方。我 运行 以“开发”模式设置应用程序,该模式是在 nginx.conf 文件的 server 部分使用 passenger_app_env.

配置的

具体错误是应用找不到racc-1.5.2。 Bundler 信息是 #<struct Bundler::Settings::Path explicit_path="/home/pi/src/bogie_can/.bundle", system_path=false, default_install_uses_path=false>.。因此,我们注意到 .bundle 路径是正确的,并且在 .bundle/ruby/2.7.0/gems/ 目录中,racc-1.5.2 确实安装并由用户“pi”拥有。

我已经清除了旧的捆绑安装并尝试将应用程序用户从 pi 切换到 root(之前是 nobody)并返回。另外,我用的是rbenv,所以我在新鲜bundle install之后也运行rbenv rehash。我还仔细查看了乘客错误页面中的“详细诊断”(这非常有帮助!),没有发现任何明显错误的地方。

使用 Passenger 错误页面作为指南,似乎:

  1. 确实按需安装了gems
  2. root 或 pi 用户有权访问这些宝石
  3. pi 是 运行 应用的合理用户
  4. passenger_rootpassenger_ruby 来自 passenger-config about 子命令,并且也经过验证。

在这一点上,一定有一些我忽略或错误的配置,我将不胜感激一些问题和指示。

我找到了问题的根本原因。

我已经将 passenger_ruby 设置为 passenger-command about ruby-command 的结果,这给了我:

passenger-config was invoked through the following Ruby interpreter:
  Command: /usr/bin/ruby2.7
  Version: ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [arm-linux-gnueabihf]
  To use in Apache: PassengerRuby /usr/bin/ruby2.7
  To use in Nginx : passenger_ruby /usr/bin/ruby2.7
  To use with Standalone: /usr/bin/ruby2.7 /usr/src/passenger-6.0.12/bin/passenger start

The following Ruby interpreter was found first in $PATH:
  Command: /home/pi/.rbenv/shims/ruby
  Version: ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [arm-linux-gnueabihf]
  To use in Apache: PassengerRuby /home/pi/.rbenv/shims/ruby
  To use in Nginx : passenger_ruby /home/pi/.rbenv/shims/ruby
  To use with Standalone: /home/pi/.rbenv/shims/ruby /usr/src/passenger-6.0.12/bin/passenger start

我正在使用 /usr/bin/ruby2.7,但遇到 racc 找不到的问题。我将其切换为使用 rbenv shim,Passenger 能够在 [APP_ROOT]/.bundle/ 目录

中正确找到所有宝石

我还清除了默认的 nginx 安装,它仍在尝试使用 nginx.service 启动,然后添加了我自己的 /etc/init.d/nginx 脚本并将其添加到 init.d 数据库中,所以它现在以 OS.

开头