1

Rails 3.1で開発したゲームがあり、アップグレードせずに既存のRails2.3.8に追加したいと思います。この3.1ゲームアプリをhttp://mydomain.com/gameのような同じドメインに存在させることは可能ですか?したがって、/gameを含むURLはRails3.1アプリに送信され、他のすべてのURLは通常の2.3アプリに送信されますか?サブディレクトリを使用してnginxを使用してこれにどのようにアプローチしますか(サブドメインを使用せずにseoを失います)?

4

2 に答える 2

2

これを行うこともできますが、nginx を使用してこの問題に対処できるため、game.mydomain.com のようなサブドメインを使用する方が簡単です。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 に答える