我目前已将 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 似乎没有运行。如果您确定它正在运行,那么导致此问题的原因可能是:
- 您使用 Apache 的 PassengerInstanceRegistryDir 选项、Nginx 的 Passenger_instance_registry_dir 选项或 Phusion Passenger Standalone 的 --instance-registry-dir 命令行参数自定义了实例注册表目录。如果是这样,请将环境变量 PASSENGER_INSTANCE_REGISTRY_DIR 设置为该目录,然后再次运行 Passenger-status。
- 实例目录已被操作系统后台服务删除。请使用 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;