Rails 3 在子目录中运行,找不到资产
Posted
技术标签:
【中文标题】Rails 3 在子目录中运行,找不到资产【英文标题】:Rails 3 running in subdirectory, assets not found 【发布时间】:2013-01-13 08:14:05 【问题描述】:我正在使用nginx 为两个 Rails 站点提供服务。 Rails1 不使用资产管道,但 Rails2 使用。 Rails2 也使用前缀来区别于 Rails1。例如:
http://myhost -> Rails1 http://myhost/abc -> Rails2两个站点都在运行,但是找不到对 Rails2 站点上资产的任何引用。
这是我的伪 nginx.conf 的样子:
http 上游轨道1 服务器 127.0.0.1:3000; 上游轨道2 服务器 127.0.0.1:3030; 服务器 位置 ~ ^/assets/ 最大过期; 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
浏览到 http://myhost/abc/
获取 Rails2 应用程序,打开没有 css 的页面,并出现以下错误:
我尝试在 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; 地点 / 根 /rails1/public; 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;【问题讨论】:
【参考方案1】:来自类似问题:https://***.com/a/3355589/417872
你试过了吗?
config.action_controller.relative_url_root = '/rails_app'
我建议您搜索一下如何从子目录中正确地为 rails 应用程序提供服务。这是您要处理的真正问题,快速搜索会返回几页有用的链接。
【讨论】:
【参考方案2】:我在生产环境中在 Nginx 上运行 Rails 4 时遇到了类似的问题。我找到的解决方案是为nginx.conf
中的资产位置指定root
路径:
location ^~ /assets/
root /home/rails/myapp/public;
gzip_static on;
expires max;
add_header Cache-Control public;
希望对你有帮助
【讨论】:
以上是关于Rails 3 在子目录中运行,找不到资产的主要内容,如果未能解决你的问题,请参考以下文章
rails - 在生产模式下找不到 application.css 资产
rails 应用程序在 heroku 上找不到 fontawesome 图标