class Test
def settings
@setting ||= load_user_env
end
def load_user_env
{one: 'Test'}
end
end
t = Test.new
t.settings
t.settings
Railsコンソールload_user_env
ではメソッドは一度呼び出されるが、WEBrickの開発環境では毎回呼び出される?
どうしてですか?
class Test
def settings
@setting ||= load_user_env
end
def load_user_env
{one: 'Test'}
end
end
t = Test.new
t.settings
t.settings
Railsコンソールload_user_env
ではメソッドは一度呼び出されるが、WEBrickの開発環境では毎回呼び出される?
どうしてですか?
編集:インスタンス変数は、各リクエストのコンテキストでのみ保持する必要があるため、リクエストを行うたびに再初期化する必要があります。コンソールで を実行t = Test.new
すると、クラスのインスタンスが 1 つ作成されるため、一load_user_env
度しか呼び出されません。クラス変数 を使用できます@@setting
。これは、リクエストと のインスタンス全体で永続化する必要がありますが、開発Test
モードでクラスをリロードするとどのように影響するかわかりません。
Rails は、リクエストごとに開発モードでクラスをリロードします。コンソールでは、 を呼び出さない限り、そうではありませんreload!
。
開発環境用に設定した場合config.cache_classes = true
、それらを再ロードする必要がなくなり、速度も向上するはずです。欠点は、変更を加えるたびにサーバーを再起動する必要があることです。