2015-01-27 2 views
0

Я использую Ruby on Rails и Heroku.Как запускать только задачу rake как только

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

Я могу установить задачу рейка, которая может запускать другую команду rake, но есть ли способ запустить только те, которые раньше не запускались?

Какая альтернатива, если я хочу, чтобы задачи рейка запускались автоматически?

+1

'грабли БД: migrate' проверяет таблицу базы данных, которая хранит метки времени последней миграции перспективы. Вам, вероятно, придется реализовать что-то подобное. – ptd

+0

Да, мне нужно что-то вроде db: migrate, но мои задачи rake не ограничиваются только базой данных, поэтому я не могу просто проверить базу данных для отношения – sonnyhe2002

+0

нет, я имею в виду, что рельсы создают специальную таблицу базы данных для хранения этой информации и проверок это когда он запускает эту команду. Я предлагаю вам создать таблицу для этой цели и сохранить задачи, которые вы там запустили. – ptd

ответ

0

первый из них, выполняющий задачу рейка дважды, то есть rake db:migrate не будет дублировать и не перезаписывать столбцы базы данных, если они уже существуют.

Например, capistrano, используемый для развертывания вашего приложения rails в основном в любом месте, будет выполнять повторные задачи, такие как db:migrate или assets:precompile при каждом развертывании приложения. Так что не нужно беспокоиться об этом.

Для автоматического запуска задач вам понадобится что-то вроде задания cron. Whenever - отличный рубиновый камень, который позволяет вам установить такую ​​работу с любимым синтаксисом Ruby.

После установки и запуска жемчужины wheneverize . в корневом каталоге вашего приложения рельсов, вы можете редактировать scheduler.rb и добавить что-то вроде:

every :sunday, :at => '12pm' do 
    rake my:awesome:task 
end 

страница Github, а также по умолчанию scheduler.rb держать много полезных примеры того, как эти рабочие места построены.

с whenever --update-crontab вы можете написать свои рубиновые кроны в кронтаб, который будет периодически запускать ваши задачи в то время, когда вы захотите их.

** редактировать

несколько задач в одном:

task :setup => [:a, :b, :c] 
task :a do 
    %x(bash command) 
end 
task :b do 
    rake db:migrate 
end 
task :c do 
    rake whatever 
end 
+0

Я планирую запустить планировщик, но моя проблема заключается в том, как этот планировщик может знать только для запуска задачи «b» и задачи «c», поскольку он выполнял задачу «a» в предыдущее время. – sonnyhe2002

+0

Сам планировщик не очень умный. Таким образом, вы, возможно, не сможете достичь этого, если не используете какое-то неприятное условие. Вы должны знать, какая задача должна выполняться или нет. Создавая несколько заданий, у вас есть полный контроль над тем, какая задача выполняется в какое время –

+0

Конечной целью является делегирование команды push-релизу, и им не нужно ничего знать о задачах рейка или создании новых таблиц. Мне нужно, чтобы они просто нажимали скрипт, и все. – sonnyhe2002

Смежные вопросы