我在源代码上在Ubuntu 14.04上安装了新的nginx 1.6.3和乘客5.0.15,以便在我的一台服务器上为我的ROR 4.2应用程序添加来自AppNeta的跟踪组件。 Nginx和乘客正在运行并提供页面服务。我正在获取服务器监控的跟踪数据。一切似乎都很好,
然而,当我运行“乘客身份”(作为root)时,我得到以下内容:
错误:Phusion Passenger似乎没有运行。如果您确定它正在运行,那么此问题的原因可能是:
- 您使用Apache的PassengerInstanceRegistryDir选项,Nginx的passenger_instance_registry_dir选项或Phusion Passenger Standalone的--instance-registry-dir命令行参数自定义了实例注册表目录。如果是,请将环境变量PASSENGER_INSTANCE_REGISTRY_DIR设置为该目录并再次运行乘客状态。
- 操作系统后台服务已删除实例目录。请使用Apache的PassengerInstanceRegistryDir选项,Nginx的passenger_instance_registry_dir选项或Phusion Passenger Standalone的--instance-registry-dir命令行参数设置不同的实例注册表目录。
醇>
这个问题是它似乎阻止了capistrano部署;在退出之前,cap会显示相同的错误。
Passenger 正在运行(它在ps
输出中并且正在提供页面)。我只需要告诉乘客状态在哪里找到当前正在运行的实例。 (这来自Design and Architecture文档。)因此,似乎设置此实例注册表目录值是必需的步骤。但是有什么价值?
根据Nginx Reference,默认值为/tmp
和/var/run/passenger-instreg
我在/ tmp中找到了一个实例目录。所以,我尝试将PASSENGER_INSTANCE_REGISTRY_DIR设置为多个不同的值:
我甚至尝试在/ 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
命令与当前连接正在运行实例。
非常感谢任何帮助。
答案 0 :(得分:10)
这里的乘客作者。
/tmp/passenger.JxmCeiA
是实例目录的示例。这确实随着每次启动而改变(因为它特定于实例)。
父目录(实例目录所在的目录)是实例注册表目录。因此,在您的情况下,正在使用的实例注册表目录是/ tmp。
我猜你有某种Passenger安装版本不匹配。我们过去几次更改了实例目录的结构,每次执行此操作时,我们都会使用内部版本号来表示它与之前的Passenger版本不兼容。你能仔细检查一下吗?
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
添加到服务文件来解决该问题。
答案 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部署现在应该可以再次工作。