2012-04-11 70 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

相關問題