Выполнение db: test: подготовить из другого рейка - PullRequest
7 голосов
/ 19 марта 2012

Я пытаюсь выполнить rake db:test:prepare из другой задачи.

namespace :db do
  namespace :populate do
    desc "Seed development database"
    task development: :environment do
      puts "Kill local server"
      %x{ ps xauwww | grep -i --regex="[t]hin" | awk '{print $2}' | xargs kill }
      puts "Resetting development database"
      Rake::Task['db:reset'].execute
      puts "Migrating development database"
      Rake::Task['db:migrate'].execute
      puts "Populating development database"
      Rake::Task['db:populate'].execute
      puts "Pepare test database"
      Rake::Task['db:test:prepare'].execute
      puts "Start local server"
      system 'thin -d start'
    end
   …
end

Использование invoke вместо execute не помогает.Кажется, это работает нормально, если я сам определю это:

task example: :environment do
  Rake::Task['db:test:prepare'].execute
end

Когда я запускаю rake db:populate:development, запускаются все задачи, кроме Rake::Task['db:test:prepare'].execute.В журнале разработки нет действий для этой команды, но это не мешает запуску следующей задачи (запуск сервера).Обычно я вижу некоторые операторы SQL, когда сам запускаю db:test:prepare.

Примечания:

$ rails -v
Rails 3.2.2

$ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]

$ uname -a
Darwin hook 11.3.0 Darwin Kernel Version 11.3.0: Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64

Ответы [ 3 ]

1 голос
/ 03 апреля 2013

Я знаю, что это не правильный способ сделать это, но у меня были похожие проблемы, и в итоге я вызвал его, используя:

`rake db:test:prepare`

Это единственный метод, который, казалось, работал для меня.

0 голосов
/ 30 июля 2013

Задача Rake, скорее всего, попадает в эту строку https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364, а ActiveRecord::Base.configurations пусто.Эта переменная установлена ​​здесь https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L5 (см. https://github.com/rails/rails/blob/370e1ad3f1f30f955bd781f0ecd113409b8ccf8f/activerecord/lib/active_record/tasks/database_tasks.rb#L21).

Есть ли вероятность, что ваш database.yml отсутствует в текущей среде или что-то еще очищает конфигурацию?

0 голосов
/ 04 сентября 2012

Попробуйте Rake::Task['db:test:prepare'].invoke вместо .execute, чтобы он сначала запускал зависимые задачи. Но она только вызывает задачу, если она не была вызвана первой.

См .: это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...