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

时间:2010-12-19 21:58:04

标签: ruby-on-rails nginx passenger

我正在组建一个公共目录所在的rails部署 符号链接到系统上的另一个目录。这是乘客3 nginx .8。它似乎不喜欢这种设置。默认情况下,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。 PHUSION   Nginx的乘客将检查   /home/www/config/environment.rb,不是   /webapps/example.com/config/environment.rb。   这个文件当然不存在,而且   因此,Phusion Passenger不会   为此虚拟主机激活自己,   而且你很可能会看到一些输出   由Nginx默认生成   目录处理程序,如Forbidden   错误信息。

     

检测机架应用程序   通过相同的机制,例外   Phusion Passenger将寻找   config.ru而不是   配置/ environment.rb中。

所以我想知道是否有一些正确的配置符号可以解决这个问题。

3 个答案:

答案 0 :(得分:10)

你不能使用以下内容:

mount --bind /original_path /your_ngnix_root_path

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

答案 1 :(得分:3)

我认为不可能使用符号链接的公共目录。我能想象的唯一解决方法是将公共目录中的任何文件和目录符号链接。

# public folder: /data/public
# app folder: /webapp/
mkdir -p /webapp/public && ln -sf /data/public/* /webapp/public/

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

答案 2 :(得分:0)

我能够使用下面链接的指南来做到这一点。

  1. /var/www/html中创建您的Rails应用
  2. 删除default
  3. 编辑/etc/nginx/nginx.conf文件
  4. sites-enabled的符号链接
  5. 重新启动nginx

How to Deploy Ruby on Rails with Passenger and Nginx on Ubuntu 16.04