2013-03-04 4 views
0

У меня есть сценарий, который будет запущен при загрузке виртуального экземпляра, содержащего приложение Rails. Это часть автоматизированной системы для настройки тестовых сред, поэтому я бы хотел, чтобы она правильно инициализировала, было ли это приложение впервые запущено в этой среде. То есть, первый раз, когда окружающая среда видит это приложение, он должен работать стандарт:Можно ли выборочно запустить db: schema: load?

rake db:create 
rake db:schema:load 
rake db:fixtures:load 

Но в любое время после того, как БД уже создана, она должна просто игнорировать эти команды. До сих пор он достаточно умен, чтобы знать, что db: create может быть пропущен, но он продолжает повторять другие.

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

ответ

0

Вероятно, прагматичное решение будет игнорировать ошибку на БД: создать (если БД существует, то он будет вызывать исключение)

Таким образом, вы можете создать задачу грабли как

task :my_task => :environment do 
    begin 
    Rake::Task["db:create"].invoke 
    Rake::Task["db:schema:load"].invoke 
    Rake::Task["db:fixtures:load"].invoke 
    rescue Exception => e 
    end 

    #more stuff... 
end