29

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

当我在生产模式下运行时RAILS_ENV=production rails s,我没有加载任何 .css 或 .js 文件。(我做了预编译资产,使用RAILS_ENV=production bundle exec rake assets:precompile。)

webrick 日志显示:

ActionController::RoutingError (没有路由匹配 [GET] "/assets/application-a73ce43be7bf75953cd0c60b2b4a7eb0.js"):

ActionController::RoutingError (没有路由匹配 [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
4

1 回答 1

47

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

config.serve_static_assets = true

Rails 的默认配置背后的原因是它假设您将在生产模式(Apache、Nginx 等)的标准 Web 服务器后面运行,然后它将请求代理到您的 Rails 应用程序。由于资产是预编译的,Apache/Nginx/etc. 可以直接为它们提供服务,而无需与您的 Rails 进程对话。

于 2012-04-11T02:54:06.990 回答