微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 使用nginx映射rails应用程序

我想使用Nginx来映射端口80上的所有rails应用程序.

目前,我在端口3000 3001和3002上运行了3个rails应用程序,我想在端口80上使用Nginx来映射它们:

http://127.0.0.1/app1 => 127.0.0.1:3000
http://127.0.0.1/app2 => 127.0.0.1:3001
http://127.0.0.1/app3 => 127.0.0.1:3002

这是我做的:

server {
    listen 80;
    location /app1/ {
        proxy_pass http://127.0.0.1:3000/;
    }

    location /app2/ {
        proxy_pass http://127.0.0.1:3001/;
    }

    location /app3/ {
        proxy_pass http://127.0.0.1:3002/;
    }
}

但是,当我尝试访问http://127.0.0.1/app1时,我只获取HTML内容,没有assets / js / css,因为浏览器试图从http://127.0.0.1/assets而不是http://127.0.0.1/app1/assets获取它们.

有没有办法来解决这个问题?

解决方法:

将ActionController :: Base.relative_url_root =“/ app1”添加到app1的config / environment.rb的末尾(类似于其他两个应用程序).这将使Rails为URL添加正确的前缀.

如果你不想搞乱Rails配置,你可能会迫使Nginx遍历你所有的资产文件夹,直到它找到它需要的那个,如果我没有弄错,它可以像这样存档:

location /assets/ {
  try_files /app1/$uri /app2/$uri /app3/$uri;
}

请注意,您必须为不同应用的资产设置不同的文件名.如果您在任何地方都使用资产管道,那就已经是这样了,因为它会散列文件名.

UPD.

您还可以尝试基于“Referer”的路由:

location /assets/ {
   if ($http_referer ~* /app1) {
     rewrite ^(.*)$app1/$1 break;
   }
   if ($http_referer ~* /app2) {
     rewrite ^(.*)$app2/$1 break;
   }
   if ($http_referer ~* /app3) {
     rewrite ^(.*)$app3/$1 break;
   }    
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐