GAE SDK (Java) 1.2.8 から、開発環境で Task Queue に Task を追加すると自動的に実行されるようになりました。
しかし現在のバージョン (1.3.0) では、開発環境の場合に rate や bucket-size が考慮されません。
Task Queue Java API の概要 - Google App Engine — Google Developers
URLFetch を使うようなタスクの場合に、これでは困るときがあります。
そこで、タスクを順番に実行するスクリプトを書きました。
run_tasks.rb
#!/usr/bin/env ruby require 'rubygems' require 'mechanize' console_path = 'http://localhost:8080/_ah/admin' run_queues = %w(first-queue second-queue) agent = WWW::Mechanize.new run_queues.each do |queue_name| loop do agent.get "#{ console_path }/taskqueue?queueName=#{ queue_name }" execute_forms = agent.page.forms.find_all { |form| form.fields.map { |v| v.name }.include?('action:executetask') } break if execute_forms.empty? execute_forms.each do |form| puts "running #{ form.field_with(:name => 'taskName').value } (#{ queue_name })..." form.click_button end end end
7 行目の
run_queues = %w(first-queue second-queue)
は、実行するキューに書き換えてください。
使い方
まず、
$ dev_appserver.rb --jvm_flag=-Dtask_queue.disable_auto_task_execution=true .
のように、--jvm_flag=-Dtask_queue.disable_auto_task_execution=true をつけて開発環境サーバを起動します。
これによって、タスクが自動的に実行されなくなります。
あとは、上のスクリプトを実行するだけです。
$ ruby run_tasks.rb