我有一个我在 Rails 3.1 中开发的游戏,我想将它添加到我现有的 Rails 2.3.8 中,而无需升级它。是否可以让这个 3.1 游戏应用程序存在于同一个域中,例如http://mydomain.com/game?那么任何带有 /game 的 url 都将指向 Rails 3.1 应用程序,而所有其他 url 将指向常规 2.3 应用程序?我将如何使用 nginx 使用子目录来解决这个问题(我宁愿不使用子域并丢失 seo)?
问问题
678 次
2 回答
2
您可以这样做,但更容易使用像 game.mydomain.com 这样的子域,因为这样您就可以使用 nginx 来处理这个问题。对于不同的 ruby 和 rails 版本的分离,请使用 rvm (https://rvm.io/)。
然后你可以像这样创建一个 nginx 配置:
upstream mydomain.com {
server unix:/var/run/thin/mydomain.0.sock;
server unix:/var/run/thin/mydomain.1.sock;
server unix:/var/run/thin/mydomain.2.sock;
server unix:/var/run/thin/mydomain.3.sock;
}
upstream game.mydomain.com {
server unix:/var/run/thin/game.mydomain.0.sock;
server unix:/var/run/thin/game.mydomain.1.sock;
server unix:/var/run/thin/game.mydomain.2.sock;
server unix:/var/run/thin/game.mydomain.3.sock;
}
server {
listen 80;
server_name mydomain.com;
access_log /path/to/rails/app/log/access.log;
error_log /path/to/rails/app/log/error.log;
root /path/to/rails/app/public;
index index.html;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
if (!-f $request_filename) {
proxy_pass http://mydomain.com;
break;
}
}
}
server {
listen 80;
server_name game.mydomain.com;
access_log /path/to/rails/app/log/access.log;
error_log /path/to/rails/app/log/error.log;
root /path/to/rails/app/public;
index index.html;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
if (!-f $request_filename) {
proxy_pass http://game.mydomain.com;
break;
}
}
}
如果可以接受使用子域而不是子文件夹,那应该为您做。
如果你真的想使用子目录,你可以使用 nginxlocation
指令来做到这一点:
于 2012-10-18T09:11:04.790 回答
0
是的
在您不想对现有应用程序造成问题的子域上运行它。
于 2012-10-18T12:54:53.160 回答