2012-11-28 43 views
1

所以,我有下面的代碼行中我<head>,裏面app/views/layouts/application.html.erb的Rails 3.2預壓選定的資產

<%= stylesheet_link_tag "front", :media => "all" %> 

其中一期工程在發展很好,但是當我切換到生產它打破,因爲它不是預編譯,所以我跑rake assets:precompile,增加了一堆文件給我的公開目錄,也未嘗不可,但所有的CSS和JS文件名類似:

  • application-digest.ext
  • application-digest.ext.gz
  • application.ext
  • application.ext.gz

哪裏ext或者是cssjs,並digest obvously變化。

圖像文件剛剛附帶name.extname-digest.ext版本。

所以,當瀏覽到頁面時,我得到一個ActionView::Template::Error告訴我front.css isn't precompiled

因爲我有不同的控制器不同的佈局(與FrontController使用application.html.erb佈局,如果該事項),我不希望包括的CSS或所有控制器的佈局裏面的js文件的所有,因爲它是隻是可恥的浪費帶寬。

我如何告訴軌編譯內app/assets單獨的所有文件?


我設法用活comilation通過設置config.assets.compile = trueconfig/environments/production.rb「修理」的問題,但我一直在閱讀無處不在,這不是處理資產的最佳途徑[1],因爲它浪費了大量的的資源。

該應用程序託管在Heroku上。


[1]:official Ruby on Rails guide page「該模式使用更多的存儲器,比默認執行更差,因此不推薦」。

回答

1

如果您在本地預編譯資產,那麼您需要提交資產,以便heroku加載它們。但這不是你想要做的。

/config/environments/production.rb

config.assets.precompile += %w(front.css, another.css, heres_a_javascript.js) 

的application.js和application.css自動預編譯。您在application.html(或任何地方,真的)中鏈接的所有其他內容都需要在此處進行預編譯

+0

Thanks!我剛纔找到了自己的答案,並且即將發佈答案,但是你打敗了我! :d – omninonsense