2015-01-08 9 views
6

なぜ非生産環境でeager_loadfalseであることが望ましいか知りたいですか?私が聞いた議論の1つは、eager_loadが大部分のRailsとアプリケーションをメモリにロードしていると言います。したがって、個々のテストにeager_loadを使用すると、実行速度が遅くなります。しかしこれは、Railsとアプリケーション関連のコードをロードせずにテストを実行する方法のようないくつかの疑問を提起していますか?ロードされることになっているRailsとアプリケーションに関連するコードは何ですか? config.eager_load_namespacesは、以下のクラスを提供します:eager_load = trueの影響は何ですか?

ActiveSupport ActionDispatch ActiveModel ActionView ActionController ActiveRecord ActionMailer Jquery::Rails::Engine MyApp::Application

は、これらのクラスのすべてであり、そのサブクラスは、ロードされ熱望していますか?

eager_load = falseを開発環境またはテスト環境で使用すると、明らかに不都合な点は何ですか?

答えて

3

しかしこれは、Railsとアプリケーション関連のコードをロードせずにテストを実行する方法のようないくつかの質問を提起しますか?

テストでは、使用する際に必要なコードが必要に応じてロードされます。 たとえば、いくつかのコード行では、テストでActive::Recordクラスを使用します。 eager_loadfalseに設定すると、このクラスはまだ必要ではなく、バニラルビープログラムで例外が発生します。ただし、レールプロジェクト内では、テストにはActive::Recordがオンデマンドで使用されます。したがって、必要なコード部分だけが必要とされたため、最終的に単一のテストがより高速に実行されます。

この手法はeager_loadingの反対で、それはautoloading

と呼ばれていますRailsとロードされた熱心されているアプリケーション関連のコードは何ですか?

チェックアウトhttps://github.com/rails/rails。それはスタッフの束です。

これらのクラスとそのサブクラスはすべて読み込み中ですか?

はい

開発やテスト環境で偽eager_load =を使用しての明確な欠点は何ですか?

開発環境では、より早い起動時間(春のようなプリローダーを使用する場合は無視されます)が得られれば、利点とベストプラクティスが得られます。恐らくリロードすることが少ないので(単に仮定して)、cache_classes=falseオプションで変更をリロードする方が簡単かもしれません。あなたは、コードカバレッジやスタイルのチェックを行うようないくつかのコードメトリクス を推定したい場合は、テスト環境で

時にはあなただけeager_loading=falseを使用することはできません。例えば。 simple_covでは、テストを開始する前にすべてのコードをeager_loadする必要があります。

一般に、いくつかのlibararyは、メソッドを呼び出す前に既に利用可能でなければならないクラスのロード時に初期化を行うため、eager_loadingで使用できない場合があります。しかし、これは後部のケースであり、neo4j.rbの宝石で私たちに起こったと言われています

+0

ruby​​のautoloadはアプリケーションコード開発中(フレームワークコードで使用されていますが) –

0

Eager loadは起動時にすべてのアプリケーションを読み込み、起動時間を長くします。

例えば、あるモデルの動作をチェックするためにレールコンソールをロードしたい場合は、モデルやコントローラなどをすべてロードするのを待つ必要があります。

+0

これは正しいですが、著者の質問に完全には触れません –

関連する問題