我在使用乘客和轨道在子 uri 上提供轨道应用程序时遇到了麻烦。
我的nginx.conf的相关部分如下:
server {
listen 80;
server_name ~^(.*)\.domain\.com$ ;
location /redmine/ {
root /home/www/data/$1/redmine/public;
passenger_enabled on;
passenger_base_uri /redmine;
}
}
Nginx 实际上正在寻找 /home/www/data/pckprojects/redmine/public/redmine/index.html 处的静态文件。
有什么想法吗?谢谢。
更新:
乘客的文件对此非常清楚,所以我应该说明为什么我要尝试以不同的方式处理这个问题。
最终,我希望 / 能够提供 Django 应用程序,可能通过 fastcgi 提供。如果您在 / 提供静态内容,并且希望在子 uri 提供 rails 应用程序,那么在子 uri 部署的乘客文档就是为此目的提供的。由于我要提供 fastcgi 应用程序,因此使用符号链接链接到 rails 应用程序是行不通的。
答案1
尝试使用“alias”而不是“root”。
位置/redmine/ { 别名/home/www/data/$1/redmine/public;
答案2
我假设您的 redmine 安装位于 /home/www/data/$subdomain/redmine/。
下列的passanger 的 nginx 部署指南,如果你想从 /sub_uri 提供 rails 应用程序,sub_uri 文件夹应该是你应用程序公共文件夹的符号链接 - 例如 /redmine -> /path/to/redmine/public。由于你将 redmine 安装放入你(未来)根目录中的 redmine 文件夹中,并希望从 /redmine 提供它,我建议重命名它 - 出于本文的目的,我假设你将其重命名为 foo。
您需要进行一些调整。首先,您必须更改虚拟服务器的根目录:
server {
listen 80;
server_name ~^(.*)\.domain\.com$ ;
root /home/www/data/$1/;
passenger_enabled on;
}
接下来,我们需要创建前面提到的符号链接:
# cd /home/www/data/$1
# ls
foo
# ln -sf foo/public redmine
# rm foo/public/index.html
我之前没有安装过 redmine,但是如果在其公共文件夹中有 index.html,您应该按照上面的方法将其删除 - nginx 现在应该为您的应用程序提供服务,而不是提供该静态文件。
最后一步是告诉 nginx 我们希望 redmine 在 /redmine 下运行,因此我们最终在 nginx.conf 中执行如下操作:
server {
listen 80;
server_name ~^(.*)\.domain\.com$ ;
root /home/www/data/$1/;
passenger_enabled on;
passenger_base_uri /redmine;
}