CentOS ***错误:Phusion Passenger似乎没有运行

当我通过capistrano将我的rails应用程序部署到我的CentOS服务器时,我一直收到这个错误:

***错误: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命令行参数设置不同的实例注册表目录。

在我的服务器上我有apache和乘客5.0.30首先,我在堆栈上查看其他答案: 链接到其中一个主题 。 遗憾的是没有什么能帮助我。 我试图从apache conf设置env路径和其他设置。 知道我应该更改什么才能部署我的rails应用程序? PATH中第一个乘客身份的完整路径在哪里? 它与passenger_root匹配吗? 以下是我的日志:

$ passenger-config validate-install > What would you like to validate? Use  to select. If the menu > doesn't display correctly, press '!' > > ⬢ Passenger itself ‣ ⬢ Apache > > ------------------------------------------------------------------------- > > Checking whether there are multiple Apache installations... Only a > single installation detected. This is good. > > ------------------------------------------------------------------------- > > * Checking whether this Passenger install is in PATH... ✓ * Checking > whether there are no other Passenger installations... ✓ * Checking > whether Apache is installed... ✓ * Checking whether the Passenger > module is correctly configured in Apache... ✓ > > Everything looks good. :-) $ rvmsudo passenger-memory-stats Version: 5.0.30 Date : 2016-11-15 13:43:44 +0100 ---------- Apache processes ---------- PID PPID VMSize Private Name -------------------------------------- 25188 1 476.6 MB 1.5 MB /usr/sbin/httpd -DFOREGROUND 25220 25188 270.4 MB 0.5 MB /usr/sbin/httpd -DFOREGROUND 25246 25188 478.6 MB 0.2 MB /usr/sbin/httpd -DFOREGROUND 25247 25188 478.6 MB 0.2 MB /usr/sbin/httpd -DFOREGROUND 25248 25188 478.6 MB 0.2 MB /usr/sbin/httpd -DFOREGROUND 25249 25188 478.6 MB 0.2 MB /usr/sbin/httpd -DFOREGROUND 25250 25188 478.6 MB 0.2 MB /usr/sbin/httpd -DFOREGROUND ### Processes: 7 ### Total private dirty RSS: 3.08 MB -------- Nginx processes -------- ### Processes: 0 ### Total private dirty RSS: 0.00 MB ----- Passenger processes ----- PID VMSize Private Name ------------------------------- 25222 421.0 MB 0.9 MB Passenger watchdog 25225 772.6 MB 1.5 MB Passenger core 25234 431.3 MB 1.0 MB Passenger ust-router ### Processes: 3 ### Total private dirty RSS: 3.39 MB 

我的apache配置文件:

   ServerName www.app.com ServerAdmin admin DocumentRoot "/srv/www/app_name/current/public" LoadModule passenger_module /home/userr/.rvm/gems/ruby-2.2.5/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so # # PassengerRuby /usr/local/rvm/gems/ruby-2.2.5 # PassengerRoot /usr/local/rvm/gems/ruby-2.2.5/gems/passenger-5.0.30 # PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.2.5/wrappers/ruby # PassengerInstanceRegistryDir /tmp #  PassengerRoot /home/userr/.rvm/gems/ruby-2.2.5/gems/passenger-5.0.30 PassengerDefaultRuby /home/userr/.rvm/gems/ruby-2.2.5/wrappers/ruby PassengerInstanceRegistryDir /tmp  Options -Indexes -FollowSymLinks -MultiViews LogLevel warn ErrorLog logs/www.app.com-error.log TransferLog logs/www.app.com-access.log CustomLog logs/www.app.cp,.log combined  AddDefaultCharset UTF-8  # Apache 2.4  Require all granted    # Apache 2.2 Order Deny,Allow Deny from All Allow from All    

我的环路:

  env file: SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin LOGNAME=root USER=root USERNAME=root HOME=/root SUDO_COMMAND=/bin/env PASSENGER_INSTANCE_REGISTRY_DIR=/tmp SUDO_USER=userr SUDO_UID=1001 SUDO_GID=100 PASSENGER_INSTANCE_REGISTRY_DIR=/tmp 

当然,我犯了错误。 感谢您的一切建议。

问题似乎是systemd私有临时function ,你可以为httpd禁用它:

 mkdir /etc/systemd/system/httpd.service.d echo "[Service]" > /etc/systemd/system/httpd.service.d/nopt.conf echo "PrivateTmp=false" >> /etc/systemd/system/httpd.service.d/nopt.conf systemctl daemon-reload systemctl restart httpd 

Passenger 5.0不再使用/tmp作为状态信息,因此即使在私有临时状态下它也应该开箱即用。

最后我解决了我的问题。 我做了两件事。

首先,我在我的主目录中创建了新的临时文件夹。 然后我添加了Apache配置文件

 PassengerInstanceRegistryDir /home/userr/instancetemp 

然后我把它推到我的env路径上

 echo 'PASSENGER_INSTANCE_REGISTRY_DIR=/home/userr/instancetemp' >> ~/.bash_profile 

我认为这已经足够了,但我还添加了这条到我的capistrano配置的路径

 set :default_env, { "PASSENGER_INSTANCE_REGISTRY_DIR" => "/home/t.panek/passenger_temp" }