【问题标题】:Phusion passenger-status: what value for passenger_instance_registry_dir?Phusion 乘客状态:passenger_instance_registry_dir 的值是多少?
【发布时间】:2015-10-24 00:57:52
【问题描述】:

我已经从源代码在 Ubuntu 14.04 上完成了 nginx 1.6.3 和乘客 5.0.15 的新安装,以便在我的一台服务器上为我的 ROR 4.2 应用程序添加来自 AppNeta 的跟踪组件。 Nginx 和乘客正在运行和服务页面。我正在获取服务器监控的跟踪数据。一切似乎都很好,

但是,当我(以 root 身份)运行“passenger-status”时,我得到以下信息:

错误:Phusion Passenger 似乎没有运行。如果您确定它正在运行,那么导致此问题的原因可能是:

  1. 您使用Apache 的PassengerInstanceRegistryDir 选项、Nginx 的passenger_instance_registry_dir 选项或Phusion Passenger Standalone 的--instance-registry-dir 命令行参数自定义了实例注册表目录。如果是这样,请将环境变量 PASSENGER_INSTANCE_REGISTRY_DIR 设置为该目录并再次运行乘客状态。
  2. 实例目录已被操作系统后台服务删除。请使用 Apache 的PassengerInstanceRegistryDir 选项、Nginx 的passenger_instance_registry_dir 选项或Phusion Passenger Standalone 的--instance-registry-dir 命令行参数设置不同的实例注册表目录。

问题在于它似乎阻止了 capistrano 的部署;在退出之前,cap 会显示同样的错误。

乘客正在运行(它在ps 输出中并且正在提供页面)。我只需要告诉乘客状态在哪里可以找到当前正在运行的实例。 (这来自Design and Architecture 文档。)因此,设置此实例注册表目录值似乎是必需的步骤。但值是多少?

根据Nginx Reference,默认是/tmp/var/run/passenger-instreg,我在/tmp中找到了一个实例目录。因此,我尝试将 PASSENGER_INSTANCE_REGISTRY_DIR 设置为多个不同的值:

  • /tmp
  • /tmp/passenger.JxmCeiA(当前实例目录,但每次启动Nginx都会改变)

我什至尝试在 /run/passenger 创建一个目录,在 nginx 配置文件中设置该值并重新启动 nginx。临时目录 is 正在创建中,但乘客状态仍然给出相同的消息。即使我使用 /opt/passenger-5.0.15/bin/passenger-status 脚本来确保我使用的是该脚本的最新版本。

原来的 'location.ini' 目录中有一些配置值用于乘客,但没有一个是实例注册表目录,因此没有可重用的内容。

有趣的是,/opt/passenger-5.0.15/lib/phusion_passenger/nginx/config_options.rb 文件没有passenger_instance_registory_dir 的条目。它还有其他 nginx 配置选项,我本来希望它也有这个。

我已经尝试设置环境变量以及 Nginx passenger_instance_registry_dir 选项,但我的理解中一定遗漏了一些东西,因为我似乎无法将 passenger-status 命令与当前运行的实例连接起来。

任何帮助将不胜感激。

【问题讨论】:

  • 如果错误消息包含正确和错误的路径,或者类似的东西,那就太好了。

标签: ruby-on-rails nginx passenger ubuntu-14.04


【解决方案1】:

这里是乘客作者。

/tmp/passenger.JxmCeiA 是实例目录的示例。这确实随着每次启动而改变(因为它特定于一个实例)。

父目录(实例目录所在的目录)是实例registry目录。因此,在您的情况下,正在使用的实例注册表目录是 /tmp。

我猜你有某种乘客安装版本不匹配。过去我们曾多次更改实例目录的结构,每次这样做时,我们都会增加一个内部版本号,以表明它与以前的乘客版本不兼容。您可以仔细检查以下内容吗?

  • Passenger 是否运行正常?
  • 内部编译 Nginx 的Passenger 版本是什么?
  • 您的passenger_root 设置为什么?是否与 Nginx 中编译的Passenger版本匹配?
  • PATH 中第一个passenger-status 的完整路径在哪里?是否匹配passenger_root

您似乎还将 Phusion Passenger APT 存储库与源 tarball 安装混合在一起。周围有多个安装通常是一个坏主意。尝试清理您的其他安装,以便您只得到一个。

还要检查您是否正确设置了PASSENGER_INSTANCE_REGISTRY_DIR 环境变量。请注意 sudo nukes 环境变量,因此您需要像这样运行乘客状态:

# Correct:
sudo env PASSENGER_INSTANCE_REGISTRY_DIR=/tmp passenger-status

# Incorrect, sudo nukes environment variables
export PASSENGER_INSTANCE_REGISTRY_DIR=/tmp
sudo passenger-status

关于 lib/phusion_passenger/nginx/config_options.rb:该文件主要列出每个服务器和每个位置的配置选项。主上下文中的许多配置选项要么尚未移植到config_options.rb 系统,要么因为需要自定义注意而无法移植。目前passenger_instance_registry_dir在ext/common/nginx/Configuration.c中实现。随着我们继续清理和重构代码库,这个选项最终可能会移至config_options.rb

【讨论】:

  • 正确的命令是:sudo env PASSENGER_INSTANCE_REGISTRY_DIR=/run/passenger /opt/passenger-5.0.15/bin/passenger-status。现在应该可以正确设置 capistrano 运行的环境
  • Passenger 运行正常。它是在 Nginx 内部编译的。 “passenger_root”设置为 /opt/passenger-5.0.15,这是 Nginx 内部编译的版本。我已将“passenger-status”复制到 /usr/sbin,这是 PATH 上的第一个目录。挑战似乎是让sudo passenger-status 为必要的部署者帐户运行。也许为实例注册表目录恢复默认使用/tmp 将解决该需求。
  • 还有一个注意事项;修改PATH,使新乘客安装的新bin目录(例如/opt/passenger-5.0.15/bin)位于PATH的第一个位置。
  • 项目“PATH 中第一个乘客状态的完整路径在哪里?它与乘客根匹配吗?”成功了。 PATH 指向较旧的安装。谢谢。
  • 那么,该怎么办?
【解决方案2】:

如果其他人在使用 systemd 服务启动乘客时遇到此问题,这可能是由于 systemd 的私有 /tmp。通过在服务文件中添加PrivateTmp=false 解决了问题。

Source

【讨论】:

  • 这确实是问题所在,对于其他人来说:您可以设置PassengerInstanceRegistryDir /var/run/passenger-instreg(当然还要创建该目录),而不是使用非私有的/tmp。
  • 如果您选择将实例注册表目录放在/var/run 下,请准备好每次重启后此目录可能会消失。有关解释和补救措施,请参阅 this,并查看 man tmpfiles.d
  • 我在 Ubuntu18.04 上遇到了同样的问题,@dimid 回答解决了这个问题。
【解决方案3】:

第一步检查phusion乘客是否安装正确

sudo passenger-config validate-install

“如果你看到一个输出说,'一切看起来都很好:-)'”那么你很好,如果不是你需要重新安装 phusion 乘客,请参考 https://www.phusionpassenger.com/library/walkthroughs/start/

第二步检查phusion乘客记忆状态

sudo passenger-memory-stats

“如果你看到进程正在运行,那很好,如果没有,你要么必须启动一些乘客应用程序,要么为它们安装带有额外库的 nginx 或 apache。对于 nginx,你需要 nginx 和 nginx-extras”。

第三步取消注释 nginx.conf 文件(对于 ubuntu 通常是 /etc/nginx/nginx.conf)或 apache.conf 文件中的 passenger_root

重启 nginx 或 apache

sudo service nginx restart # (or systemctl restart nginx, for new version of linux such as ubuntu 15.04, CentOS7)

现在你可以运行了

passenger-status 

错误现在应该消失了。您最有可能得到的输出是“Phusion Passenger 目前没有为任何应用程序提供服务。”

【讨论】:

    【解决方案4】:

    我在Nginx integration mode 上运行Passenger,在Ubuntu 20.04 上,我已经通过the official repos 的apt 安装了它。

    对我有用的是将其添加到/etc/nginx/conf.d/mod-http-passenger.conf

    passenger_instance_registry_dir /tmp;
    

    现在应该可以从命令行以 Capistrano 方式重新启动乘客:

    $ passenger-config restart-app <your_app's_root_path> --ignore-app-not-running
    

    如果这可行,Capistrano 部署现在应该可以再次运行。

    【讨论】:

    • 添加行后刚重启了Nginx,不过谢谢
    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 2011-12-09
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多