Ruby on rails 是否可以在同一个域上运行两个不同的Rails应用程序(使用子目录)?

Ruby on rails 是否可以在同一个域上运行两个不同的Rails应用程序(使用子目录)?,ruby-on-rails,ruby-on-rails-3,routing,nginx,Ruby On Rails,Ruby On Rails 3,Routing,Nginx,我有一个在Rails 3.1中开发的游戏,我想在不升级的情况下将其添加到现有的Rails 2.3.8中。有没有可能让这个3.1游戏应用程序存在于同一个域名上,比如?那么任何带有/game的url都会指向Rails 3.1应用程序,而所有其他url都会指向常规的2.3应用程序?我将如何使用nginx使用子目录来实现这一点(我不希望使用子域而丢失seo) 您可以这样做,但是使用game.mydomain.com这样的子域更容易,因为这样您就可以使用nginx处理这个问题。为了分离不同的ruby和ra

我有一个在Rails 3.1中开发的游戏,我想在不升级的情况下将其添加到现有的Rails 2.3.8中。有没有可能让这个3.1游戏应用程序存在于同一个域名上,比如?那么任何带有/game的url都会指向Rails 3.1应用程序,而所有其他url都会指向常规的2.3应用程序?我将如何使用nginx使用子目录来实现这一点(我不希望使用子域而丢失seo)

您可以这样做,但是使用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;
                }
        }
}
如果使用子域而不是子文件夹是可以接受的,那么这应该对您有帮助

如果您确实想使用子目录,可以使用nginx
location
指令:

是的


在您不想给现有应用程序带来问题的子域上运行它。

将配置保存在一个文件中也很重要,。。。因为否则配置文件的命名就很重要了。谢谢你的回答,davidb,但我真的不想使用子域进行seo…子域不是一个普遍的缺点:但是你失去了该子域的所有seo。你说“seo”是什么意思?页面排名?用子目录做怎么样?我不想失去搜索引擎优化。很抱歉,迟来的答复,但它不会影响你的搜索引擎优化。你想知道搜索引擎优化最重要的事情是非常简单的。内容为王,内容越多越好。但是你可以在一个子目录上运行它,这也取决于你。