私たちは常にアプリケーションの設定を環境ファイルに入れていました。これは生産管理には適していないため、イニシャライザを介してロードします。
# myinitializer.rb
ApplicationConfig = YAML.load_file("#{Rails.root}/config/application/default.yml").symbolize_keys()
を介して構成にアクセスし始めるとすぐにApplicationConfig
、アプリケーション テストのパフォーマンスが大幅に低下しました。1 つの rspec スイートが 4 秒から 30 秒に短縮されました。
before_filter
アプリケーション コントローラーでは、次のように動作する を使用して何らかのアクションを実行する必要があります。
before_filter :extra_control
def extra_control
if ApplicationConfig.some_flag
...
end
end
を指す変数を宣言すると、ApplicationConfig
パフォーマンスが完全に回復します。
config = ApplicationConfig
def extra_control
if config.some_flag
...
end
end
なんで?グローバル変数を介してこれにアクセスするとパフォーマンスが低下するのはなぜですか? これは、ビューやその他のコントローラーのコード ベース全体で行います。インスタンス変数をすべてのコントローラーに注入するなど、これを別の方法で行う必要がありますか?
編集: YAML から構成をロードするコードがいずれかの方法で 1 回だけ呼び出されることを確認したため、繰り返しのロードが根本的な原因ではないようです。
編集:これは、設定変数がブール値ではなく文字列としてロードされ、アプリケーションがテスト スリープ パターンに入ったために発生したバグであることが判明しました :( 申し訳ありませんが、試してくれてありがとう。私の人生の 3 日間もう戻らない!