Rails 3 在子目录中运行,找不到资产



我正在使用nginx为两个Rails网站提供服务。Rails1 不使用资产管线,但 Rails2 使用。Rails2 还使用前缀来区分它与 Rails1。 例如:

http://myhost ->导轨1http://myhost/abc ->导轨2

两个站点都在运行,但是找不到对 Rails2 站点上资产的任何引用。

这是我的伪nginx.conf的样子:

http {    上游导轨1 {        服务器 127.0.0.1:3000;    }    上游导轨2 {        服务器 127.0.0.1:3030;    }    服务器 {        位置 ~ ^/资产/{            最大过期时间;            add_header缓存控制公共;            access_log关;        }        位置/ABC {            proxy_pass http://rails2;        }        位置/{            proxy_pass http://rails1;        }    }}

另外,我的 Rails 2 应用程序中的 routes.rb:

Rails2App::Application.routes.draw do
  scope '/abc' do
    resources :projects
    root :to => 'home#index'
  end
end

浏览到 Rails2 应用程序的http://myhost/abc/,显示没有 css 的页面,并出现以下错误:

获取 http://myhost/assets/application-asdasd.css 404(未找到)

我尝试在 production.rb 文件中使用 config.assets.prefix = '/abc',但它不起作用。 我也在ngnix.conf文件中尝试了不同的变体,但也无济于事。

有人知道我做错了什么,或者错过了什么吗?


更新

我不太确定为什么,但我能够使用@location而不是上游(错误地)让它工作。 但是我不得不将资产文件夹从 Rails2 应用程序移动到 Rails1 应用程序。 不太理想。

对服务器部分的更改:

位置 ~ ^/(资产)/{    最大过期时间;    add_header缓存控制公共;    access_log关;}位置 ~ ^/(ABC)/{    根/rails2/public;    try_files $uri/index.html $uri.html $uri @rails2;    error_page 404/404.html;    error_page 422/422.html;    error_page 500 502 503 504/500.html;    error_page 403/403.html;}位置/{    根/轨1/公共;    try_files $uri/index.html $uri.html $uri @rails1;    error_page 404/404.html;    error_page 422/422.html;    error_page 500 502 503 504/500.html;    error_page 403/403.html;}位置 @rails1 {    proxy_pass http://127.0.0.1:3000;}位置 @rails2 {    proxy_pass http://127.0.0.1:3030;}

来自一个类似的问题:https://stackoverflow.com/a/3355589/417872

你试过这个吗?

config.action_controller.relative_url_root = '/rails_app'

我建议谷歌搜索如何从子目录正确提供 rails 应用程序。这是您正在处理的真正问题,快速搜索返回了几页有用的链接。

我在生产环境中在Nginx上运行Rails 4时遇到了类似的问题。我找到的解决方案是在nginx.conf中指定资产位置的root路径:

location ^~ /assets/ {
    root /home/rails/myapp/public;
    gzip_static on;
    expires max;
    add_header Cache-Control public;
}

希望这有帮助

相关内容

  • 没有找到相关文章

最新更新