限制rake任务的实例

时间:2010-07-21 20:39:28

标签: ruby-on-rails ruby rake

有没有办法限制rake任务的实例数?

我有一个rake任务,用于阅读每5分钟作为一个cron作业运行的电子邮件。

有时候rake任务需要5分钟才能完成,而另一个任务则需要5分钟 rake任务在完成之前启动。

在rake文件中检查ps -Af有一些hacky变通方法但是我 我正在寻找更清晰的方法来限制启动多个实例 rake任务类似于守护进程宝石的工作方式。

检查电子邮件只是一个例子,我有几个涉及的rake任务 轮询多个服务器。

2 个答案:

答案 0 :(得分:1)

你也可以使用PidFile。

首先,安装'pidfile'gem。然后像这样完成你的任务:

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

    # do some stuff
end

答案 1 :(得分:0)

仍然找不到超级优雅的方式,所以我采取了保存一个独特的文件 每个佣金任务。

这就是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

仍然希望在rake中使用优雅的方式来限制单个实例。