Phusion passenger-status:passenger_instance_registry_dir有什么价值?

时间:2015-08-01 11:54:28

标签: ruby-on-rails nginx passenger 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.   
  3. 操作系统后台服务已删除实例目录。请使用Apache的PassengerInstanceRegistryDir选项,Nginx的passenger_instance_registry_dir选项或Phusion Passenger Standalone的--instance-registry-dir命令行参数设置不同的实例注册表目录。
  4.   

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

Passenger 正在运行(它在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。正在创建临时目录 ,但乘客状态仍然提供相同的消息。即使我使用/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命令与当前连接正在运行实例。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:10)

这里的乘客作者。

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

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

我猜你有某种Passenger安装版本不匹配。我们过去几次更改了实例目录的结构,每次执行此操作时,我们都会使用内部版本号来表示它与之前的Passenger版本不兼容。你能仔细检查一下吗?

  • 乘客是否正常运行?
  • 编译> Nginx?
  • 的乘客版本是什么?
  • 您的passenger_root设置为什么?它是否与Nginx内编译的Passenger版本匹配?
  • 路径中第一个passenger-status的完整路径在哪里?它与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

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

答案 1 :(得分:8)

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

Source

答案 2 :(得分:5)

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

sudo passenger-config validate-install

"如果你看到一个ouput说,'一切都很好看: - )'"那么你很好,如果不是你需要重新安装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目前没有为任何应用程序提供服务。"

答案 3 :(得分:0)

我在Ubuntu 20.04的Nginx integration mode中运行Passenger,并且已经通过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部署现在应该可以再次工作。