2013-12-25 2 views
0

Я хотел бы улучшить существующую задачу Rails 4 db:test:prepare, чтобы вызвать дополнительную задачу db:seed для загрузки некоторых статических справочных данных в мою тестовую базу данных. Я написал эту пользовательскую задачу в Lib/задач/test_seed.rake:Изменение окружающей среды Внутреннее расширение рейка

Rake::Task['db:test:prepare'].enhance do 
    Rails.env = "test" 
    Rake::Task['db:seed'].invoke 
end 

Однако rake db:test:prepare задача была еще высева дб развития, пока я явно установлено соединение с «тест». Это то, что сработало:

Rake::Task['db:test:prepare'].enhance do 
    Rails.env = "test" 
    ActiveRecord::Base.establish_connection('test') 
    Rake::Task['db:seed'].invoke 
end 

Хотя, это кажется неестественным. Есть ли лучший/правильный способ улучшить эту задачу db:test:prepare, которая первоначально срабатывает против среды разработки?

Спасибо.

ответ

1

Я думаю, что это так хорошо, как вы собираетесь. Я столкнулся с той же проблемой, и это единственный способ заставить меня работать.

Если вы хотите, чтобы сделать его немного более изящным вы можете создать метод, как это:

def switch_environment(new_env, &block) 
    original_env = Rails.env 

    Rails.env = new_env.to_s 
    ActiveRecord::Base.establish_connection new_env.to_sym 

    block.call 
ensure 
    Rails.env = original_env.to_s 
    ActiveRecord::Base.establish_connection original_env.to_sym 
end 

Вы можете ссылаться на это следующим образом:

switch_environment :test do 
    ...your code... 
end 

Я испытал это на месте, и это работает как и ожидалось.

Смежные вопросы