我正在组建一个rails部署,其中公共目录是系统上另一个目录的符号链接。这是nginx .8上的乘客3。它似乎不喜欢这种设置。默认情况下,Nginx总是遵循符号链接,所以AFAIK不是做与Apache的+ FollowSymLinks等效的事情。
更新
看起来这里有这个:http://www.modrails.com/documentation/Users%20guide%20Nginx.html#application_detection
请注意,Nginx的Phusion Passenger不会解析根路径中的任何符号链接。例如,假设您的根指向/home/www/example.com,而后者又是/webapps/example.com/public的符号链接。 Nginx的Phusion Passenger将检查/home/www/config/environment.rb,而不是/webapps/example.com/config/environment.rb。此文件当然不存在,因此Phusion Passenger不会为此虚拟主机激活自身,并且您很可能会看到Nginx默认目录处理程序生成的某些输出,例如Forbidden错误消息。
Rack应用程序的检测通过相同的机制进行,Phusion Passenger将寻找config.ru而不是config / environment.rb。
所以我想知道是否有一些适当的配置符号可以解决这个问题。
我认为不可能使用符号链接的公共目录。我能想象的唯一解决方法是将公共目录内的任何文件和目录进行符号链接。
# public folder: /data/public
# app folder: /webapp/
mkdir -p /webapp/public && ln -sf /data/public/* /webapp/public/
对于/ data / public中的每个新文件或目录,您必须再次运行此命令。
你不能使用以下内容:
mount --bind /original_path /your_ngnix_root_path
而不是使用符号链接?对于nginx来说,这将是一个通常的目录,为什么它会指向你想要的另一个目录。
我能够通过下面链接的指南来做到这一点。
/var/www/html
中创建rails应用程序default
。/etc/nginx/nginx.conf
文件sites-enabled
How to Deploy Ruby on Rails with Passenger and Nginx on Ubuntu 16.04