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 的页面,并出现以下错误:

获取 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; 地点 / 根 /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 4 生产环境中找不到资产的 404 错误

rails 应用程序在 heroku 上找不到 fontawesome 图标

Rails 3 应用程序中的 Sass 导入错误 - “找不到或无法读取要导入的文件:指南针”

使用资产目录时 AppCode 警告“找不到资源”

将 Rails 3.1 项目部署到 Heroku 时出现问题:找不到 JavaScript 运行时