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