1

我有一个我在 Rails 3.1 中开发的游戏,我想将它添加到我现有的 Rails 2.3.8 中,而无需升级它。是否可以让这个 3.1 游戏应用程序存在于同一个域中,例如http://mydomain.com/game?那么任何带有 /game 的 url 都将指向 Rails 3.1 应用程序,而所有其他 url 将指向常规 2.3 应用程序?我将如何使用 nginx 使用子目录来解决这个问题(我宁愿不使用子域并丢失 seo)?

4

2 回答 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指令来做到这一点:

http://wiki.nginx.org/HttpCoreModule#location

于 2012-10-18T09:11:04.790 回答
0

是的

在您不想对现有应用程序造成问题的子域上运行它。

于 2012-10-18T12:54:53.160 回答