Есть ли способ автоматически иметь "rake db: migrate RAILS ENV=test" после "rake db: migrate" в среде разработки?
Есть ли способ автоматически делать rake db:migrate RAILS_ENV=test
после каждого rake db:migrate
, когда в среде разработки?
У меня есть охранник и еще охрана-rspec работает, и я действительно раздражен из-за неудачных тестов, даже если он работает вручную в браузере.
Каждый раз, когда у меня была пауза от разработки, мне стоило не менее 15 минут, чтобы понять, что я просто забыл позвонить rake db:migrate:test
после изменения базы данных.
Так как я уже использую охранник я подумал о том, чтобы добавить охранник-грабли к проекту тоже, но я не знаю, какой файл мне стоит посмотреть. При наблюдении за развитием .sqlite3, rake db:migrate RAILS_ENV=test
будет уволен каждый раз, когда я что-то делаю со своими записями через браузер, так что это не совсем то, что я хочу.
6 ответов:
Возможно, просто создайте псевдоним команды в вашем файле
.bashrc
.~/.bashrc
alias rake_db_migrate='rake db:migrate db:test:prepare'
терминал
$ rake_db_migrate
Я предпочитаю использовать псевдоним таким образом:
В вашем
~/.bashrc
alias migrate='rake db:migrate && rake db:test:prepare'
Легко потратить 30 минут, пытаясь понять, почему ваши тесты не проходят, только чтобы вспомнить, что вы не сбросили базу данных. Это решит эту проблему.
Быстрее:
alias migrate='rake db:migrate db:test:prepare'
(добавьте это в свой.bashrc
, он загрузит рельсы только один раз)
Вариант, который мне очень нравится, - это переопределить фактическую задачу в другом скрипте rake. Это будет вызвано автоматически после запуска миграции. Вот так я всегда создаю диаграмму 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
Я использую этот псевдоним:
alias rake_db_migrate='rake db:migrate && rake db:migrate RAILS_ENV=test'
Потому что
rake db:test:prepare
устарело.Причина, по которой я использую это, заключается в том, что наш проект использует pg_search (postgreSQL) вместе со структурой.sql (не схема.rb) и почему-то запуск
rake db:migrate
не подготавливает тестовую базу данных.
В ответ на ваш первоначальный вопрос об использовании
guard-rake
, вы можете посмотретьdb/schema.rb
, так как это будет обновляться всякий раз, когда вы переносите базу данных. Однако этот файл также будет изменен, если вы выполните откат, поэтому вам, вероятно, придется вытащить версию миграции из строки определения схемы вdb/schma.rb
или использоватьrake db:test:prepare
вместоrake db:migrate RAILS_ENV=test
.Похоже, что это хрупко, поэтому использование псевдонима оболочки, вероятно, лучший подход. Я просто хочу, чтобы был лучший способ!