2012-01-15 10 views
3

ためのシードタスクをI次のタスクがあります。デシベルの実行:開発

namespace :db do 
    desc "Drop, create, migrate, seed the database and prepare the test database for rspec" 
    task :reset_db => :environment do 
    puts "Environment Check: Rails Environment = #{Rails.env}" 
    Rake::Task['db:drop'].invoke 
    Rake::Task['db:create'].invoke 
    Rake::Task['db:migrate'].invoke 
    #Rake::Task['db:fixtures:load'].invoke 
    Rake::Task['db:test:prepare'].invoke 
    puts 'Seeding Database..' 
    Rake::Task['db:seed'].invoke 
    end 
end 

このタスクでは、最後のdb:seed行まで正常に動作しますが。
これは、test環境を使用しているように見え、そこにデータを作成し、他のすべてのタスクはdevelopment環境で実行します。コマンドラインでrake db:seedを実行すると、development環境で正しく動作します。

どうすればtest環境で実行されないようにすることができますか?

+0

'db:test:prepare'は' test'データベースを準備していませんか? – Frost

+0

おっと、私はrails_envも同様に設定していることを知らなかった。私はそれを選ぶことができるように答えてください。 – Spyros

答えて

3

db:test:prepare rakeタスクはテストデータベースを準備するため、RAILS_ENV=testと設定します。

あなたのタスクがテスト環境で実行される理由は、db:test:prepareが実際にRAILS_ENV変数を上書きするためです。

+0

最後の2行( 'db:test:prepare'と' db:seed')を入れ替えたり、それらの間に 'RAILS_ENV = development'という行を追加するだけで、実際に何かできることがあります。私はこれについて100%確信していません... – Frost

0

次のようにあなたのシードタスクを再定義:

namespace :db do 
    task :seed => :environment do 
    env_seed_file = File.join(Rails.root, 'db', 'seeds', "#{Rails.env}.rb") 
    load(env_seed_file) if File.exist?(env_seed_file) 
    end 
end 

を今、あなたは、この(ENV固有のファイルは、通常の種子のファイルの後にロードされている)のようなものを行うことができます。

db 
+-- seeds 
| +-- development.rb 
| +-- production.rb 
| +-- staging.rb 
+-- seeds.rb 

クレジット:codeofficer.com

関連する問題