Выполнение задачи db: seed для разработки - PullRequest
4 голосов
/ 15 января 2012

У меня есть следующая задача:

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?

Ответы [ 2 ]

3 голосов
/ 15 января 2012

Задача db:test:prepare rake подготавливает тестовую базу данных и поэтому устанавливает RAILS_ENV=test.

Таким образом, причина, по которой ваша задача запускается в среде тестирования, заключается в том, что db:test:prepare фактически перезаписывает вашу RAILS_ENV переменную.

0 голосов
/ 14 декабря 2012

Переопределите вашу начальную задачу следующим образом:

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 файл загружается после обычного файла seed):

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

Кредит: codeofficer.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...