2012-04-11 71 views
29

我的应用在开发模式下运行良好。rails 3.1.3:试图在生产中本地运行,资产管道不工作

当我在生产模式下使用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”):

的文件汇编(根据日志\ production.log文件)和我公共/资产目录确实显示有和没有指纹的文件:

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 

回答

47

默认情况下,Rails在生产模式下不提供静态资产。如果要禁用该服务的静态资产,与此更新config/environments/production.rb文件:

config.serve_static_assets = true 

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

+0

现在有道理 - 感谢您的高超解释。 – jpwynn 2012-04-11 07:41:30

+0

@Dylan刚刚遇到同样的问题 - 感谢真棒解释! – weltschmerz 2013-01-07 01:44:58

相关问题