我的/ public目录可以是rails 3 + passenger 3 + nginx 0.8的符号链接吗?

Joh*_*hir 6 ruby-on-rails passenger nginx

我正在组建一个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.

所以我想知道是否有一些适当的配置符号可以解决这个问题.

Pol*_*toS 10

你不能使用以下内容:

mount --bind /original_path /your_ngnix_root_path
Run Code Online (Sandbox Code Playgroud)

而不是使用符号链接?对于ngnix来说,这将是一个通常的目录,为什么它会指向你想要的另一个目录.


小智 3

我认为不可能使用符号链接的公共目录。我能想到的唯一解决方法是对公共目录内的任何文件和目录进行符号链接。

# public folder: /data/public
# app folder: /webapp/
mkdir -p /webapp/public && ln -sf /data/public/* /webapp/public/
Run Code Online (Sandbox Code Playgroud)

对于 /data/public 中的每个新文件或目录,您必须再次运行此命令。