Ограничить количество экземпляров рейка - PullRequest
0 голосов
/ 22 июля 2010

Есть ли способ ограничить количество экземпляров рейка?

У меня есть грабли для чтения электронных писем, которые запускаются каждые 5 минут как задание cron.

Иногда выполнение рейка занимает более 5 минут, а другое Задание rake запускается до его завершения.

Есть хакерские обходные пути для проверки ps -Af внутри файла rake, но я Ищу более чистый способ ограничить запуск нескольких экземпляров Rake-задачи, аналогичные тому, что делает гем демона.

Проверка электронной почты является лишь примером, у меня есть несколько таких рейковых задач, которые включают опрос нескольких серверов.

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Вы также можете просто использовать PidFile.

Сначала установите гем 'pidfile'. Затем сделайте свою задачу такой:

task :my_task => :environment do |task|
    PidFile.new(:piddir => Rails.root.join('tmp', 'pids'), :pidfile => task.name)

    # do some stuff
end
0 голосов
/ 22 июля 2010

Все еще не могу найти супер элегантный способ, поэтому я прибегнул к сохранению уникального файла для каждой задачи rake.

Вот так теперь выглядит задача rake -

run_unique_rake(__FILE__) do
     puts "\n is running\n"
     sleep(40)
end

вот run_unique_rake

def self.run_unique_rake(file)    
    path = RAILS_ROOT + "/" + CONFIG['rake_log'] + "/" + File.basename(file)

     unless File.exists?(path)
        `touch #{path}`
         yield if block_given?
         `rm #{path}`
     end
end

Все еще надеемся на элегантный способ в пределах граблей ограничиться одним экземпляром.

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