有没有办法限制rake任务的实例数?
我有一个rake任务,用于阅读每5分钟作为一个cron作业运行的电子邮件。
有时候rake任务需要5分钟才能完成,而另一个任务则需要5分钟 rake任务在完成之前启动。
在rake文件中检查ps -Af
有一些hacky变通方法但是我
我正在寻找更清晰的方法来限制启动多个实例
rake任务类似于守护进程宝石的工作方式。
检查电子邮件只是一个例子,我有几个涉及的rake任务 轮询多个服务器。
答案 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中使用优雅的方式来限制单个实例。