Ответ 1
Возможно, просто введите псевдоним команды в свой .bashrc
файл.
~/.bashrc
alias rake_db_migrate='rake db:migrate db:test:prepare'
Терминал
$ 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
будет запускаться каждый раз, когда я что-то делаю с моими записями через браузер, так что это не совсем то, что я хочу.
Может кто-нибудь помочь мне с моей проблемой?
Возможно, просто введите псевдоним команды в свой .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 минут, пытаясь понять, почему ваши тесты не передаются, только чтобы помнить, что вы не использовали reset базу данных. Это решит эту проблему.
Быстрее: alias migrate='rake db:migrate db:test:prepare'
(добавьте это в свой .bashrc
, он будет загружать Rails только один раз)
Опция, которая мне очень нравится, заключается в том, чтобы переопределить текущую задачу в другой грабли 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
Я использую этот псевдоним: 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
не создает тестовую базу данных.
В ответ на ваш оригинальный вопрос об использовании guard-rake
вы можете посмотреть db/schema.rb
, так как это будет обновляться всякий раз, когда вы переносите базу данных. Однако этот файл также будет изменен, если вы выполните откат, поэтому вам, вероятно, придется вытащить версию миграции из строки определения схемы в db/schma.rb
или использовать rake db:test:prepare
вместо rake db:migrate RAILS_ENV=test
.
Кажется, что это хрупкое, поэтому использование псевдонима оболочки, вероятно, является лучшим подходом. Я просто хочу, чтобы был лучший способ!