ローカルでgemを開発する時、それを利用するRailsアプリケーションと連動して動かしたい時、gem側の変更を再読み込みするのにはrails console
だとreload!
が効かず再起動が必要になって時間がかかる。
それを解決する方法
RequireReloader gem
gemを追加
Gemfile
group :development do
gem 'require_reloader'
config/environments/development.rb
YourApp::Application.configure do
...
RequireReloader.watch_local_gems!
end
以下、Railsコンソールで
> reload!; MyGemModel.new
依然reload!
は必要
Springを一時無効にする (Rails4.1以降など)
require_reloader
を入れる前、最初はspringで少しはまった。
単純にrails c
を再起動しても再読み込みされなかった。
# Springを一時的に無効にする
DISABLE_SPRING=1 rails c
# Spring関連コマンド
bin/spring status
bin/spring stop
require_reloader
入れると、DISABLE_SPRING
の有無関係なく動く。
StackOverflowでも色々な方法があったけど、今回の方法がすっきりしているように思ったのでこれにした。
pry
とかload
使うとかでも出来る方法は他にもありそう。
reload!
もしたくない人は他の方法を考える必要がある。