GoogleAppEngine + JRubyで年越ししたけど彼女ができたよー

GoogleAppEngine + JRubyでクリスマスまでに彼女をつくる方法を見ながら初めてGoogle App Engineを使ってみた。cronの部分で詰まっている間に年越しして2010年になってしまったが、今日うまくいったので備忘録としてメモ。ここから先は元記事を1度試した方限定の内容。

cronの設定ができない

元記事が公開された後にGoogle App Engine gemsが0.0.7にバージョンアップしたせいか、ローカルでは動作することを確認したが、デプロイする際にcronの設定がうまくいかなかった。さっそくネット上で情報収集をし、そして同様の状況に陥っている方を発見。

「GoogleAppEngine + JRubyでクリスマスまでに彼女をつくる方法」を後追いしてわかったこと

これは,トピックが上がっているとおり,
Google App Engine API Wrappers for JRubyのライブラリにエラーがあるものと想定される.
しかし,解決方法はxml->yamlに変更せよ.と言うことらしいが,
自分の手元では再現できなかった.

自分の環境でも同様のエラーとなり、手動でURLを叩けば動作するが、cronによるスケジュールタスクは動作市内状況だった。

解決策

これで手詰まりかーと思っていたところ、解決策が書かれていたトピックを発見。

解決策が書かれていたのは以下の
more problems with cron in the latest version 0.0.7
の中にあった。バグのようで、次リリースで修正するみたい。

you must create a WEB-INF/cron.xml file which contains only 
"<?xml version="1.0" encoding="UTF-8"?><cronentries/>", 
and then you specify your REAL cron info in cron.yaml. 
If only one of the two files exists, it will not work. 

つまり、WEB-INF/cron.xmlには

<?xml version="1.0" encoding="UTF-8"?>
<cronentries/>

のみ記述して、一度すべてのcronジョブを削除し、/cron.yamlでcronジョブを作成する。

cron:
- description: return
  url: /cron/return
  schedule: every 3 minutes
- description: auto
  url: /cron/auto
  schedule: every 3 hours

これでアップロードすればOK。ちなみにアクセス制限の部分は元記事と同じく/WEB-INF/web.xmlに記述すれば大丈夫みたい。

参考URL

Uploading cron jobs fails:http://code.google.com/p/appengine-jruby/issues/detail?id=59