2011-01-27 17 views
40

私のイニシャライザ(config/initializers/)のコードは、環境でのみ実行されますが、:testまたは:productionでは実行されません。それを行う最善の方法は何ですか?Rails:環境ごとのイニシャライザ?

config/environments/test.rbに貼り付けるのは汚れているようですが、if Rails.env == 'development' do ... end文でイニシャライザファイル全体をラップするのはあまり好きではありません。これを行ういくつかの標準的な方法がありますか?

(背景:テストの読み込み時間を短縮するために、私は私のGemfile:developmentグループにバリスタの宝石を移動しようとしているが、config/initializers/barista_config.rbBarista.configureを呼び出して、今それはテスト(および生産のその上でチョーク)モード。 )

答えて

40

あなたの唯一の2つのオプションがconfig/environments/development.rbに設定コードを入れているか、ifブロックで初期化コードをラップしていることは間違いありません。あなたはif Rails.env.development?を実行して、2番目のオプションを強化することができます。

+7

Foo gemが開発モードまたはテストモードでのみ読み込まれている場合は、 'if defined?(Foo)'を使用することもできます。 [Konacha](https://github.com/jfirebaugh/konacha)はこれを推奨しています。 –

+0

私はKonachaのアプローチが好きです - 既にGemfileに記載されているものを繰り返さないようにします。 – ZoFreX

1

バリスタは、このために設定する設定があります。

Barista.configure do |c| 
    c.env = :development 
end 

これだけDEVモードでJSにcoffescriptを再コンパイルし、テストをスピードアップする必要があります。

は、あなたが実行していることを確認してください:。

rake barista:brew 

でコードをチェックする前に

https://github.com/Sutto/barista

+0

'Barista.env'はBaristaの環境を設定し、デフォルトは' Rails.env'です。それを ':development'に強制すると、あなたのアプリが' Rails.env'にかかわらず開発モードにあるかのように動作します。このように環境を設定すべきではありません。 –

3

これは良いアイデアであるかどうかは知りませんが、それは違う考えです。

あなたはconfig/initializers/developmentディレクトリを作成することができます(またはconfig/environments/development/initializers)は、そのディレクトリにbarista_config.rbを入れ、その後、config/environments/development.rbからそのディレクトリには何も含まれています。

これは良いアイデアかどうかは分かりませんが、少なくとも3番目のオプションです...質問をしてから3年半もこの問題についてまだ考えている場合に備えて。

関連する問題