0
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の開発環境では毎回呼び出される?

どうしてですか?

4

1 に答える 1

1

編集:インスタンス変数は、各リクエストのコンテキストでのみ保持する必要があるため、リクエストを行うたびに再初期化する必要があります。コンソールで を実行t = Test.newすると、クラスのインスタンスが 1 つ作成されるため、一load_user_env度しか呼び出されません。クラス変数 を使用できます@@setting。これは、リクエストと のインスタンス全体で永続化する必要がありますが、開発Testモードでクラスをリロードするとどのように影響するかわかりません。

Rails は、リクエストごとに開発モードでクラスをリロードします。コンソールでは、 を呼び出さない限り、そうではありませんreload!

開発環境用に設定した場合config.cache_classes = true、それらを再ロードする必要がなくなり、速度も向上するはずです。欠点は、変更を加えるたびにサーバーを再起動する必要があることです。

于 2013-03-06T15:38:40.113 に答える