2012-03-22 3 views
3

私は特定のビューで利用できるようにする必要がある大規模な配列をいくつか持っています。現在、これらをYAMLファイルに保存していて、以下のようにコントローラ定数にロードしています。私のRailsコントローラでYAMLファイルを定数としてロードするのは効率的ですか?

環境設定中にRailsがファイルを読み込むときに、この定数がメモリに格納されていると仮定しますが、私の妄想的な部分は、コントローラにアクセスするたびにファイルシステムにぶつかっているのだろうかと思います。誰もがこの分野でベストプラクティスを提案できますか?

class OnboardingController < ApplicationController 

    BRANDS = YAML.load(File.open("#{Rails.root}/config/brands.yml", 'r')) 
    STORES = YAML.load(File.open("#{Rails.root}/config/stores.yml", 'r')) 

    # ... 
+0

あなたがこれを行うことができるかわかりません - 動的定数の割り当て – tommybernaciak

答えて

6

私はこの定数をメモリに格納されていることを前提としたときにレールロード 環境設定

うん、ファイル中のファイルがロード/要求されている場合、そこのすべてが として実行され、割り当てられます。したがって、一度だけロードされます。

私の妄想の部分は、コントローラにアクセスするたびにファイルシステム に当たっているのかと不思議です。

一部真は、開発モードでは、定数は各 要求に解除されているが、それは生産には関係ないはず。

誰もこのエリアのベストプラクティスを提案できますか?

それは古い労働者 がまだ実行されているので、あなたは時間を持って、起動時に最初の要求 の代わりに、キャッシュのみを転送構文解析であるとしてそれを残します。

6

あなたは可能性遅延ロードそれ

class OnboardingController < ApplicationController 
    def brand_values 
    @@brand_values ||= YAML.load((File.open("#{Rails.root}/config/brands.yml", 'r')) 
    end 

    def stores_values 
    @@stores_values ||= YAML.load((File.open("#{Rails.root}/config/stores.yml", 'r')) 
    end 

end 
関連する問題