Rails: сделать эту команду рейка осведомленной о том, что она находится в тестовой среде
У меня есть следующая задача rake, определенная в моей папке lib/tasks
:
namespace :db do
namespace :test do
task :prepare => :environment do
Rake::Task["db:seed"].invoke
end
end
end
Теперь, что это делает, семена тестовой БД при запуске rake db:test:prepare
. Я делаю это, потому что у меня есть базовые записи, которые должны существовать для того, чтобы приложение функционировало, поэтому они не являются необязательными и не могут быть издевательскими.
Отдельно у меня есть модель, которая использует S3 для хранения активов в процессе разработки и производства, но я не хочу, чтобы он использовал S3 для тестирования. Я установил метод в модели, который изменяет путь хранения от S3 до локального, если Rails.env.test?
Однако это не работает. Мне было интересно, была ли задача рейка осведомлена о том, из какой среды она вызвана, и оказывается, что это НЕ. Я помещал это в начало моего файла seeds.rb:
puts "Environment Check: Rails Environment = #{Rails.env}"
Разумеется, когда задача выполнит следующие отпечатки: Environment Check: Rails Environment = development
Итак, как я могу переделать эту задачу рейка, чтобы при посеве тестовой БД она знала, что она высевает тестовую БД??
Ответы
Ответ 1
У меня тоже была эта проблема; в моем файле db/seeds.rb
у меня есть блок, который создает учетные записи пользователей в среде разработки, но они также создавались при подготовке тестовой среды для запуска rake
для тестирования RSpec или Cucumber, что привело к красной стене.
Обновлено. Я обнаружил, что лучший способ указать среду для задач rake - указать среду в задаче, выше всех заявлений, для которых необходимо установить среду. Итак, в этом случае:
Rails.env = 'test'
Rake::Task["db:seed"].invoke
выполняет задание.
(Первая ссылка является источником и подтверждением для этого метода, вторая ссылка - это файл в моем собственном проекте, для которого мне это нужно.)
Ответ 2
Из чтения db: test tasks source, похоже, что они только заботятся о захвате тестовой информации db из базы данных .yml, но don Не заботьтесь о том, в какой реальной среде они это делают.
Вам может потребоваться запустить rake db: test: подготовить RAILS_ENV = test, чтобы убедиться, что вы находитесь в тестовой среде.