[Rails] 靜態檔案處理(The AssetPipeline)
keywords: rails
, assets
, public
, static
, manifest
Sprockets
透過 Rails 的 pipeline 可以對檔案(例如,SCSS, CoffeeScript, ERB)進行前處理(pre-process),這些是透過 sprockets-rails
這個 gem 完成的。
Sprockets 會打包(編譯、最小化、壓縮)所有的 .js
, .css
檔案成為一支 .js
和 .css
檔。在開發環境下,所有的檔名都會加入一段 SHA256 的編碼,若檔案沒有變更,則使用 cache 的資料,減少伺服器的負擔;一旦檔案有變更,這個編碼就會改變,以此避免 cache 問題。
# 檔名
global-908e25f4bf641868d8683022a5b62f54.css
設定打包方式
一般來說我們會在 ./config/application.rb
中看到
# ./config/application.rb
require "sprockets/railtie"
我們可以在 ./config/environments/production.rb
中設定要打包的方法:
# ./config/environments/production.rb
# 如果有安裝 sass-rails 這個 gem,則這會預設作為 css_compressor 的社竟
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass