2011-01-24 8 views
57

yamlファイルから構成設定を読み込むイニシャライザがあります。他のイニシャライザでこれらの設定を使用する必要があります。設定が必要なイニシャライザでは表示されません。私が考えているのは、設定が遅すぎるということです。私の設定イニシャライザが最初にロードされることをどのように保証するのですか?イニシャルライターが別のものに依存しているようなレールはありませんか?Rails 3のイニシャライザのロード順序を変更するにはどうすればよいですか?

ありがとうございます!

答えて

75

イニシャライザの名前を01_name.rbに変更します。これにより、前にアルファベット順に読み込まれます。

あなたが あなたの初期化子内の任意の順序依存性を持っている場合は、あなたが命名によって ロード順序を制御することができます。公式Rails Guide for configuration(先端に感謝zetetic)を引用する

編集

。たとえば、 01_critical.rbは、 02_normal.rbの前にロードされます。

+47

これはうまくいくものの、醜い回避策のようです。 –

+1

まあ、私はまったく同じことに直面しています。これが私が使っているものです。だから私はあなたと一緒にお待ちしています:) –

+1

私は同じことをし、シードファイルにも当てはまります。アルファベット順にソートされています。私は、順序を変更する別の明示的な方法を認識していません。 – nathanvda

24

最初のような文を必要とした直後に、設定/ environment.rbのファイルで構成コードを置き:思えないよう、ガイドは数字で初期化ファイル名を付加推奨していても

# Load the rails application 
require File.expand_path('../application', __FILE__) 

# Load global configurations 
CONFIG = Hashie::Mash.new YAML.load_file(Rails.root.join("config", "application.yml"))[Rails.env] 

# Initialize the rails application 
RailsSetup::Application.initialize! 
+0

ありがとうございます。それは私のために働いた。 –

19

醜い。別の方法は、提供された初期化フックを利用することです。 http://guides.rubyonrails.org/configuring.html#initialization-events

などを参照してください。

# application.rb 

module YourApp 
    class Application < Rails::Application 
    config.before_initialize do 
    # initialization code goes here 
    end 
    end 
end 
+0

Splendiferous!もしあなたがRails 5で作業しているのであれば、 – Midwire

+0

@MidwireはRails 4.2でサポートされているようです。 http://guides.rubyonrails.org/v4.2/configuring.html#initialization-events – samjewell

+0

@ samjewellええ、私はそれをテストしていないが、ケースのように見えます。 – Midwire

6

最初に1つのファイルがロードされていることを確認するには、require_relativeを使用します。

# aaa.rb 
require_relative 'bbb' 
# ... code using values from bbb.rb ... 
+2

これはうまく動作しますが、必要なファイルを必要なときに実行するだけでなく、Railsは通常、通常のイニシャライザの実行中にファイルを実行します(事実上、ディレクトリリスト)。したがって、必要としているファイルが何度も実行されたくないことを確実にしたいと思うでしょう。たとえば、必要なファイルが定数を初期化する場合、Railsは定数を再初期化することを警告します。 –

+0

@MarkSchneider別の例:ファイルが '#use'でミドルウェアを挿入すると、ミドルウェアが再び挿入されます。これにより、アプリケーションが壊れることさえあります。 –

関連する問題