新手问题 如何一个 VPS 上跑多个 Rails Application

springwq · 2014年12月14日 · 最后由 springwq 回复于 2014年12月18日 · 3100 次阅读

现在 VPS 上用 Passenger + Nginx 跑了一个 App, 是参照论坛的 Wiki 配置的。 如果,我想要再部署一个 Rails App, 如何设置呢?

https://github.com/ruby-china/ruby-china/wiki/Ubuntu-12.04-%E4%B8%8A%E4%BD%BF%E7%94%A8-Nginx-Passenger-%E9%83%A8%E7%BD%B2-Ruby-on-Rails

server {
    listen 80;
    server_name site-a.com;
    root /var/www/site-a.com/current/public;
    passenger_enabled on;
}

server {
    listen 80;
    server_name site-b.com;
    root /var/www/site-b.com/current/public;
    passenger_enabled on;
}

#2 楼 @Rei 如果把 Passenger 换成 Thin 呢?

#3 楼 @springwq 这就要用 nginx 的 upstream 了。

upstream site-a {
  server 127.0.0.1:5000; // 假设 site-a 开了一个进程监听 5000
}

upstream site-b {
  server 127.0.0.1:6000; // 假设 site-b 开了一个进程监听 6000
}

server {
    listen 80;
    server_name site-a.com;
    root /var/www/site-a.com/current/public;
    try_files $uri/index.html $uri.html $uri @site-a;

    location @site-a {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://site-a;
   }
}

server {
    listen 80;
    server_name site-b.com;
    root /var/www/site-b.com/current/public;
    try_files $uri/index.html $uri.html $uri @site-b;

    location @site-b {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://site-b;
   }
}

thin 进程启动要另外管理。

#4 楼 @Rei 谢谢!我等会试一下。

使用 upstream 时,再 proxy_pass 时要加个 proxy_redirect off,不然 Rails 的 root_url 就是 upstream 名而不是 http://site-a.com 了。

@Rei @luffycn 貌似 Thin 配置好复杂,对新手来说,我看了这篇 SO 文章,还是觉得 Passenger 比较适合新手。

http://stackoverflow.com/questions/4113299/ruby-on-rails-server-options

#7 楼 @springwq 那就试试 unicorn 很简单

#8 楼 @ery 有入门文档推荐吗?

#6 楼 @alixiaomiao 好,加上了。

#2 楼 @Rei 这两个可以写在同一个 conf 文件里吗?还是需要新建一个?

#12 楼 @springwq 可以写在同一个文件,也可以分开多个。

#13 楼 @Rei 报这个错

2014/12/15 23:21:10 [emerg] 11595#0: a duplicate default server for 0.0.0.0:80

#14 楼 @springwq a duplicate default server for 0.0.0.0:80

#17 楼 @knwang 233,谢谢老师,没发现这篇博客。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号