启动 Web 应用程序时出错 -Passenger、Rails、Raspberry PI
Posted
技术标签:
【中文标题】启动 Web 应用程序时出错 -Passenger、Rails、Raspberry PI【英文标题】:Error starting web application - Passenger, Rails, Raspberry PI 【发布时间】:2022-01-16 12:27:05 【问题描述】:我在具有 4 GB RAM 和 32 GB SD 卡的 Raspberry Pi 4 上安装了一个带有 Ruby 2.7.4 的 ROR 应用程序(版本 6.1.4.1)。我使用 tarball 安装安装了 Passenger 6.0.12,并使用 nginx 运行它。 app 目录中的passenger start
运行成功,但是当我尝试在端口 80 上使用 nginx (/opt/nginx/sbin/nginx
) 运行它时,访问该站点时出现上述错误。
我通过在nginx.conf
中配置的IP 地址访问应用程序,并且应用程序安装在/home/pi/src/bogie_can
中。在 app 目录中有一个带有配置文件的 .bundle
目录,这就是安装 gem 的地方。我在“开发”模式下运行应用程序,该模式使用passenger_app_env
在nginx.conf
文件的server
部分中配置。
具体错误是app找不到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
。我还仔细查看了乘客错误页面中的“详细诊断”(这非常有用!)并且没有发现任何明显错误的内容。
以乘客错误页面为指导,似乎:
-
确实根据需要安装了 gems
用户(root 或 pi)有权访问 gems
pi
是运行应用的合理用户
passenger_root
和 passenger_ruby
来自 passenger-config about
子命令,并且也经过验证。
在这一点上,一定有一些我忽略或出错的配置,我将不胜感激一些问题和指点。
【问题讨论】:
【参考方案1】:我找到了问题的根本原因。
我将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
数据库中,以便它现在从操作系统启动。
【讨论】:
以上是关于启动 Web 应用程序时出错 -Passenger、Rails、Raspberry PI的主要内容,如果未能解决你的问题,请参考以下文章
Azure WebApp Asp.NET Core 2 错误:启动应用程序时出错
问啥我的web.xml一加Listener,启动tomcat就出错