旭川の配線は、少しに無茶苦茶です。

今天為了修改部落格的一點 CSS 架構,所以又去參考了一下實戰聖經的 Asset Pipeline 章節

Rails 產生 controller 檔案時,也會產生一個同名的 .coffee.scss 檔案,這沒有什麼實際的用途,它並不是說該 controller 的頁面才會執行該 js 和 css。建議可以砍掉這個檔案,自己安排 js 和 css 的檔案即可。

這段話也不能說錯。不過,事實上 rails 是可以讓只有某 controller 的頁面下,執行對應 JS 和 CSS 的。

指引看來不難,就針對 JS 使用 <%= javascript_include_tag params[:controller] %> 而 CSS 使用 <%= stylesheet_include_tag params[:controller] %> 這樣。

那就在 app/views/layouts/application.html.erb 加入 <%= javascript_include_tag params[:controller] %> 看看吧。

Sprockets::Rails::Helper::AssetNotPrecompiled in Home#index

Asset was not declared to be precompiled in production.
Add \`Rails.application.config.assets.precompile += %w( articles.js )\` to \`config/initializers/assets.rb\` and restart your server

很明顯,我們需要一點施工:

When using asset precompilation, you will need to ensure that your controller assets will be precompiled when loading them on a per page basis. By default .coffee and .scss files will not be precompiled on their own. See Precompiling Assets for more information on how precompiling works.

理由是 .coffee.scss 檔案都不是 HTML 能讀取的 JS 和 CSS 檔案:.coffee 要透過 CoffeeScript 編譯成 JS 檔案、而 .scss 則要依賴 SASS 編譯成 CSS 檔案。

趕緊去 config/initializers/assets.rb 加上 Rails.application.config.assets.precompile += %w( articles.js ) 後重新開機吧。

現在,你應該可以用 CoffeeScript 與 SASS 來寫程式了。

當然,如果你習慣其他預處理器如 LESSTypeScript,rails 也有對應的 gem 完成你的願望。

參考資料