Подтвердить что ты не робот

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

Итак, как я могу переделать эту задачу рейка, чтобы при посеве тестовой БД она знала, что она высевает тестовую БД??

4b9b3361

Ответ 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, чтобы убедиться, что вы находитесь в тестовой среде.