Rails 3.1.3:尝试在本地运行生产环境,资产管道无法工作

29

我的应用在开发模式下运行良好。

当我使用RAILS_ENV=production rails s以生产模式运行时,我的.css和.js文件都没有被加载。(我使用了RAILS_ENV=production bundle exec rake assets:precompile预编译资源。)

webrick日志显示:

ActionController::RoutingError (No route matches [GET] "/assets/application-a73ce43be7bf75953cd0c60b2b4a7eb0.js"):

以及

ActionController::RoutingError (No route matches [GET] "/assets/application-986dd79830088c416c1632c12999ec69.css"):

这些文件已经被编译(根据log\production.log文件),我的public/assets目录中也显示这些带或不带指纹的文件:

ls public/assets
application-986dd79830088c416c1632c12999ec69.css
application-986dd79830088c416c1632c12999ec69.css.gz
application-a73ce43be7bf75953cd0c60b2b4a7eb0.js
application-a73ce43be7bf75953cd0c60b2b4a7eb0.js.gz
application.css
application.css.gz
application.js
application.js.gz
1个回答

47

默认情况下,在生产模式下Rails不会提供静态资产服务。如果您想禁用此功能并提供静态资产服务,请更新您的config/environments/production.rb文件,加上以下内容:

config.serve_static_assets = true
Rails 默认配置的原因是它默认假设在生产模式下你会运行在一个标准的 Web 服务器(如 Apache、Nginx 等)之后,这些服务器可以直接代理请求到 Rails 应用程序中。由于资产已经预编译,因此 Apache/Nginx 等可以直接提供服务而无需与 Rails 进程通信。

@Dylan 刚遇到了同样的问题 - 感谢您出色的解释! - Dennis Hackethal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接