GAE SDK (Java) 1.2.5 から、Task Queue がサポートされて、appengine-apis (0.0.9) にも早速実装されているようなので試してみました。
taskqueue という適当なタスク追加アプリケーションを sinatra で作ってみます。
ローカルでのみ確認しています。
$ mkdir taskqueue
$ cd taskqueue
$ sudo gem install google-appengine
$ appcfg.rb gem install sinatra appengine-apis
config.ru
require 'appengine-rack' AppEngine::Rack.configure_app :application => 'taskqueue', :version => 1 require 'taskqueue' run Sinatra::Application
taskqueue.rb
require 'rubygems' require 'sinatra' require 'appengine-apis/labs/taskqueue' # fix appengine-apis bug module AppEngine::Labs::TaskQueue class Task def add(queue=nil) # queue = Queue.new(queue) unless Queue.kind_of? Queue queue = Queue.new(queue) unless queue.kind_of? Queue @handle = queue.java_queue.add(_task) self end end end get '/' do # 引数を省略すると default キューができます。 # queue = AppEngine::Labs::TaskQueue::Queue.new('hoge') のようにすると、hoge キューができます。 # (ただし、hoge に関する記述を queue.xml にする必要があります) queue = AppEngine::Labs::TaskQueue::Queue.new (1..10).each do |i| task = AppEngine::Labs::TaskQueue::Task.new(:url => "/worker/#{ i }") queue.add task end 'added tasks' end
$ cd (gem のディレクトリ)/appengine-sdk-1.2.5/appengine-java-sdk-1.2.5/lib/user $ sudo mv appengine-api-labs-1.2.5.jar appengine-api-1.0-sdk-labs-1.2.5.jar
appengine-api-labs-1.2.5.jar という jar がバンドルされないと Task Queue が使えないのですが、appengine-api-1.0-sdk- という prefix がついていないと google-appengine がバンドルしてくれないので、ファイル名を変更しています。
$ dev_appserver.rb .
http://localhost:8080/ を実行してから http://localhost:8080/_ah/admin/taskqueue で確認。