rails 3.1.3:尝试在生产中本地运行,资产管道无法正常工作

时间:2012-04-11 01:31:36

标签: ruby-on-rails asset-pipeline

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

当我使用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

1 个答案:

答案 0 :(得分:47)

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

config.serve_static_assets = true

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