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

Есть ли способ автоматически использовать "rake db: migrate RAILS_ENV = test" после "rake db: migrate" в среде разработки?

Есть ли способ автоматически выполнить rake db:migrate RAILS_ENV=test после каждого rake db:migrate в среде разработки?

У меня guard и guard-rspec и я очень раздражен про неудачные тесты, даже если он работает вручную в браузере.

Мне стоило по меньшей мере 15 минут каждый раз, когда у меня была пауза от разработки, чтобы понять, что я просто забыл позвонить rake db:migrate:test после смены базы данных.

Поскольку я уже пользуюсь защитой, я думал о добавлении guard-rake к проекту, но я не знаю, какой файл я должен посмотреть. При просмотре development.sqlite3, rake db:migrate RAILS_ENV=test будет запускаться каждый раз, когда я что-то делаю с моими записями через браузер, так что это не совсем то, что я хочу.

Может кто-нибудь помочь мне с моей проблемой?

4b9b3361

Ответ 1

Возможно, просто введите псевдоним команды в свой .bashrc файл.

~/.bashrc

alias rake_db_migrate='rake db:migrate db:test:prepare'

Терминал

$ rake_db_migrate

Ответ 2

Я предпочитаю использовать псевдоним таким образом:

В ~/.bashrc

alias migrate='rake db:migrate && rake db:test:prepare'

Легко потратить 30 минут, пытаясь понять, почему ваши тесты не передаются, только чтобы помнить, что вы не использовали reset базу данных. Это решит эту проблему.

Ответ 3

Быстрее: alias migrate='rake db:migrate db:test:prepare' (добавьте это в свой .bashrc, он будет загружать Rails только один раз)

Ответ 4

Опция, которая мне очень нравится, заключается в том, чтобы переопределить текущую задачу в другой грабли script. Это будет вызвано автоматически после выполнения миграции. Подобно этому, я всегда создаю диаграмму ERD после миграции базы данных:

# lib/tasks/database.rake
namespace :db do
  desc 'Additional migrate task that creates the diagram'
  task :migrate do
    if Rails.env.development?
      Rake::Task['diagram:erd'].invoke
    end
  end
end

Итак, в вашем случае:

# lib/tasks/database.rake
namespace :db do
  desc 'Additional migrate task that creates the diagram'
  task :migrate do
    `rake db:migrate RAILS_ENV=test`
  end
end

Другим подходом было бы запустить следующее, которое клонирует вашу новую схему в тестовую базу данных:

rake db:migrate db:test:clone

Ответ 5

Я использую этот псевдоним:
alias rake_db_migrate='rake db:migrate && rake db:migrate RAILS_ENV=test'

потому что rake db:test:prepare устарел.

Причина, по которой я использую это, заключается в том, что в нашем проекте используется pg_search (postgreSQL) вместе со структурой .sql(not schema.rb), и по какой-либо причине запуск rake db:migrate не создает тестовую базу данных.

Ответ 6

В ответ на ваш оригинальный вопрос об использовании guard-rake вы можете посмотреть db/schema.rb, так как это будет обновляться всякий раз, когда вы переносите базу данных. Однако этот файл также будет изменен, если вы выполните откат, поэтому вам, вероятно, придется вытащить версию миграции из строки определения схемы в db/schma.rb или использовать rake db:test:prepare вместо rake db:migrate RAILS_ENV=test.

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