Phusion passenger-status:passenger_instance_registry_dir的值是多少?

Pet*_*noy 14 ruby-on-rails passenger nginx ubuntu-14.04

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

但是,当我运行"乘客身份"(作为root)时,我得到以下内容:

错误: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部署; 在退出之前通过上限显示相同的错误.

乘客正在运行(它在ps输出中并且正在提供页面).我只需要告诉乘客状态在哪里找到当前正在运行的实例.(这来自设计和体系结构文档.)因此,似乎设置此实例注册表目录值是必需的步骤.但到了什么价值?

根据Nginx参考,默认值是/tmp/var/run/passenger-instreg 我在/ tmp中找到了一个实例目录.所以,我尝试将PASSENGER_INSTANCE_REGISTRY_DIR设置为许多不同的值:

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

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

对于乘客,原始"location.ini"目录中有一些配置值,但没有一个是实例注册表目录,因此无需重用.

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

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

任何帮助将不胜感激.

Hon*_*gli 10

乘客作者在这里.

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

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

我猜你有某种Passenger安装版本不匹配.我们过去几次更改了实例目录的结构,每次我们这样做时都会碰到一个内部版本号,表明它与之前的Passenger版本不兼容.你能仔细检查以下内容吗?

  • 乘客是否正常运行?
  • Nginx中编译了什么乘客版本?
  • 你的passenger_root设定是什么?它是否与Nginx内编译的Passenger版本相匹配?
  • passenger-statusPATH中第一条路径的完整路径在哪里?它匹配passenger_root吗?

您似乎也将Phusion Passenger APT存储库与源代码tarball安装混合在一起.多次安装通常是一个坏主意.尝试清理其他安装,以便最终只安装一个.

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

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

# Incorrect, sudo nukes environment variables
export PASSENGER_INSTANCE_REGISTRY_DIR=/tmp
sudo passenger-status
Run Code Online (Sandbox Code Playgroud)

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


dim*_*mid 9

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

资源

  • 这确实是问题所在,而对于其他人:你可以设置`PassengerInstanceRegistryDir/var/run/passenger-instreg`(并创建该目录),而不是非私有/ tmp. (4认同)

Shu*_*yey 7

第一步检查错误乘客安装正确

sudo passenger-config validate-install
Run Code Online (Sandbox Code Playgroud)

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

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

sudo passenger-memory-stats
Run Code Online (Sandbox Code Playgroud)

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

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

重启nginx或apache

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

现在你可以跑了

passenger-status 
Run Code Online (Sandbox Code Playgroud)

错误现在应该消失.您将获得的最有可能的输出是"Phusion Passenger目前没有提供任何应用程序."