開發環境下的 initializers (reload) 問題

希望 config/initializers 下的行為能在每次 app reload 時重跑一次的解決方案。

MarsMars閱讀 2 分鐘
開發環境下的 initializers (reload) 問題

當我們在 config/initializers 下做了一些動態行為,例如 model extend。遇到 app reload 時,特別是在 development 環境下,因為所有的 class 都 reload 了,使得原本在 initializers 裡面執行的 extend 動作被 reset,導致 reload app 後,那些 extend 的效果失效。

這時 ActiveSupport::Reloader 提供了非常好的解決方案,它提供了 app reload 前後的 callback,方便我們把寫在 initializers 裡面的內容,在 app reload 時也會自動的跑一次:

before:

# config/initializers/foo.rb
User.extend(PowerUpConcern)

after:

# config/initializers/foo.rb
ActiveSupport::Reloader.to_prepare do
  User.extend(PowerUpConcern)
end

更多相關 method 可參考此 https://api.rubyonrails.org/classes/ActiveSupport/Reloader.html

Mars
關於作者Mars自由接案工程師 | Ruby on Rails

自由接案者、Ruby on Rails 工程師、水肺潛水員、業餘羽球、二胡、鋼琴愛好者。喜歡貓、狗。

延伸閱讀