gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:39:36 26 4
gpt4 key购买 nike

我想使用 nginx 来将我所有的 rails 应用程序映射到端口 80 上。

目前,我有 3 个 rails 应用程序在端口 3000 3001 和 3002 上运行,我想在端口 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"到你的最后 config/environment.rb app1 的(其他两个应用程序类似)。这将使 Rails 为 URL 添加适当的前缀。

如果您不想弄乱 Rails 配置,您可能可以强制 Nginx 遍历您的所有 Assets 文件夹,直到找到所需的文件夹,如果我没记错的话,它可以像这样存档:

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

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

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;
}
}

关于ruby-on-rails - 使用 nginx 映射 Rails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31772597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com