rakeタスク一意性チェック
1854 ワード
通常、rakeタスクが一緒に実行される場合はありません.
しかし、いくつかの状況があります.
1.配置
Aはローカルで外部ネットワークに配備され、Bも配備される.これで衝突が発生します.のうまくいかないともう一度再配置しなければならないので、面倒です.
2.タイミングタスク
頻繁なタイミングタスクをcrontabに5分に1回実行すると仮定しますが、前のtaskが5分以内に終了しない可能性があります.これにより衝突も発生します.
だから、いくつかの特殊なrakeタスクに対して一意性検査を行います.プロセスにタスクがある場合は、新しいタスクは実行されません.
簡単な例です.
初めてrake namespace:taskを実行して、すべて正常です!
2回目:
バカに見える.の各タスクは自分で$0を設定してから探しに行きます.
rakeが現在のtaskのnamespace名とtask名を取得する方法を提供すれば爽やかです.しかし、rakeドキュメントを探してもありません.の
------------------------------------------------------
ありがとう~
変更しました:test.rake
しかし、いくつかの状況があります.
1.配置
Aはローカルで外部ネットワークに配備され、Bも配備される.これで衝突が発生します.のうまくいかないともう一度再配置しなければならないので、面倒です.
2.タイミングタスク
頻繁なタイミングタスクをcrontabに5分に1回実行すると仮定しますが、前のtaskが5分以内に終了しない可能性があります.これにより衝突も発生します.
だから、いくつかの特殊なrakeタスクに対して一意性検査を行います.プロセスにタスクがある場合は、新しいタスクは実行されません.
簡単な例です.
namespace :namespace do
desc "xx"
task :task do
$0 = "_rake_namespace_task"
# 1 0, ruby ps
raise "This task is running!!" if %x{ps aux|grep #{$0}|awk '{print $11}'}.split("
").count($0) > 1
puts "Bang!!"
sleep 600
end
end
初めてrake namespace:taskを実行して、すべて正常です!
2回目:
hooopo@x-hooopo:~/work/trunk$ rake namespace:task
(in /home/hooopo/work/trunk)
rake aborted!
This task is running!!
(See full trace by running task with --trace)
バカに見える.の各タスクは自分で$0を設定してから探しに行きます.
rakeが現在のtaskのnamespace名とtask名を取得する方法を提供すれば爽やかです.しかし、rakeドキュメントを探してもありません.の
------------------------------------------------------
ありがとう~
変更しました:test.rake
def uniq_task(t)
$0 = ["rake", t.name].join(":")
raise "This task is running!!" if %x{ps aux|grep #{$0}|awk '{print $11}'}.split("
").find_all{|x| x==$0 }.size > 1
end
namespace :namespace do
desc "xx"
task :task do |t|
uniq_task(t)
puts "Bang!!"
sleep 600
end
end