Phusion Passenger:无法在实例注册表目录 /tmp 内创建子目录

Phusion Passenger:无法在实例注册表目录 /tmp 内创建子目录

我目前已将 Rails 6 应用程序部署到 Ubuntu 20.04 上的 EC2 实例。我使用以下方式部署了 Rails 应用程序Phusion 乘客和 Nginx。当我尝试访问 ec2 实例时出现以下错误。

无法启动 Phusion Passenger 看门狗,因为它在启动过程中遇到以下错误:无法在实例注册表目录 /tmp 内创建子目录:没有此文件或目录 (errno=2) (-1:未知错误)

似乎无法写入/tmp文件。我尝试更改目录的权限/tmp,但似乎不起作用。当前权限如下。

ubuntu@ip-xxxxxxxxxx:/var/www/tyrion$ ls -l
total 72
-rw-r--r-- 1 www-data www-data 1739 Jan 18 17:41 Gemfile
-rw-r--r-- 1 www-data www-data 5779 Jan 18 17:41 Gemfile.lock
-rw-r--r-- 1 www-data www-data   31 Jan 18 17:41 PULL_REQUEST_TEMPLATE.md
-rw-r--r-- 1 www-data www-data  121 Jan 18 17:41 README.md
-rw-r--r-- 1 www-data www-data  227 Jan 18 17:41 Rakefile
drwxr-xr-x 9 www-data www-data 4096 Jan 16 20:43 app
drwxr-xr-x 2 www-data www-data 4096 Jan 18 17:41 bin
drwxr-xr-x 5 www-data www-data 4096 Jan 18 17:42 config
-rw-r--r-- 1 www-data www-data  130 Jan 18 17:41 config.ru
drwxr-xr-x 3 www-data www-data 4096 Jan 18 17:41 db
drwxr-xr-x 4 www-data www-data 4096 Jan 15 21:30 lib
drwxr-xr-x 2 www-data www-data 4096 Jan 18 17:41 log
drwxr-xr-x 2 www-data www-data 4096 Jan 18 17:41 public
drwxr-xr-x 2 www-data www-data 4096 Jan 18 17:41 storage
drwxr-xr-x 8 www-data www-data 4096 Jan 18 17:41 test
drwxr-xr-x 2 www-data www-data 4096 Jan 18 18:28 tmp
drwxr-xr-x 2 www-data www-data 4096 Jan 18 17:41 vendor

tmp注意到允许它访问目录的权限w。这很奇怪,因为在 Phusion 的配置中乘客根据文件 passenger_instance_registry_dir默认为/tmp。因此,不需要声明passenger_instance_registry_dir /tmp,我甚至尝试在配置中添加此行,但没有成功。

这是我的乘客配置:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/tyrion/public;

        server_name _;

        passenger_enabled on;
        passenger_ruby /home/ubuntu/.rvm/gems/ruby-2.7.0/wrappers/ruby; 
}

当我运行时,sudo passenger-status我也得到以下结果。

错误:Phusion Passenger 似乎没有运行。如果您确定它正在运行,那么导致此问题的原因可能是:

  1. 您使用 Apache 的 PassengerInstanceRegistryDir 选项、Nginx 的 Passenger_instance_registry_dir 选项或 Phusion Passenger Standalone 的 --instance-registry-dir 命令行参数自定义了实例注册表目录。如果是这样,请将环境变量 PASSENGER_INSTANCE_REGISTRY_DIR 设置为该目录,然后再次运行 Passenger-status。
  2. 实例目录已被操作系统后台服务删除。请使用 Apache 的 PassengerInstanceRegistryDir 选项、Nginx 的 Passenger_instance_registry_dir 选项或 Phusion Passenger Standalone 的 --instance-registry-dir 命令行参数设置其他实例注册表目录。

这让我很困惑,因为/tmp这是默认的注册表目录。有什么办法可以解决这个问题吗?

答案1

nginx可以在/etc/nginx/conf.d/mod-http-passenger.conf

passenger_instance_registry_dir /tmp;

相关内容