Phusion乘客状态:passenger_instance_registry_dir有什么价值?

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

但是,当我运行“乘客身份”(以root身份)时,我得到以下结果:

错误:Phusion乘客似乎没有运行。 如果你确定它正在运行,那么这个问题的原因可能是:

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

问题在于,这似乎是阻止了卡皮斯特拉诺部署; 在退出之前,这个相同的错误是由cap显示的。

乘客正在运行(它在ps输出和页面正在服务)。 我只需要告诉乘客状态在哪里find当前正在运行的实例。 (这是从devise和体系结构文档。)因此,似乎设置此实例registry目录值是必需的步骤。 但是,到什么价值?

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

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

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

在原有的“location.ini”目录中有一些configuration值,但没有一个是实例registry目录,所以没有什么可重用的。

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

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

任何帮助将不胜感激。

这里是旅客作者。

/tmp/passenger.JxmCeiA是一个实例目录的例子。 每次启动都会改变(因为它是特定于实例的)。

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

我猜你有一些乘客安装版本不匹配。 过去几次我们改变了实例目录的结构,每次我们做了这个操作,我们都碰到一个内部的版本号,以表明它与以前的Passenger版本不兼容。 你可以仔细检查以下?

  • 乘客似乎是否正确运行?
  • Nginx 里面编译了什么Passenger版本?
  • 你的passenger_root设置了什么? 它是否与Nginx中编译的Passenger版本相匹配?
  • PATH中第一个passenger-status的完整路径在哪里? 它匹配passenger_root

您似乎也正在将Phusion Passenger APT存储库与源代码安装包混合在一起。 有多个安装周围通常是一个坏主意。 尝试清理你的其他安装,这样你只能得到一个。

还要检查你是否正确设置了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

如果其他人在使用systemd服务启动Passenger时遇到这个问题,这可能是由于systemd的private /tmp 。 该问题已通过将PrivateTmp=false添加到服务文件中解决。

资源

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

 sudo passenger-config validate-install 

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

第二步检查旅客记忆状态

 sudo passenger-memory-stats 

“如果你看到进程正在运行,那么这很好,如果没有,你要么启动一些客运应用程序,要么安装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) 

现在你可以运行

 passenger-status 

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