[Diary] GAE/pyとbulkloader

ファイルをアップロードしようとすると、bulkloaderを使う必要がある。
ところが、ドキュメントに書いてあるとおりにやるとエラーが出る。

% appcfg.py --email=XXXXXX@gmail.com update expressions/
10:21 PM Host: appengine.google.com
10:21 PM Application: expressions; version: 1
10:21 PM
Starting update of app: expressions, version: 1
10:21 PM Getting current resource limits.
Password for XXXXXX@gmail.com:
10:21 PM Scanning files on local disk.
Error 404: --- begin server output ---
This application does not exist (app_id=u'expressions').

      • end server output ---

最初、このエラーの意味がさっぱり分からなかった。app.yamlにはapplication=expressionsって書いてあるのに、、、と。
まだlocalhostで動かしてるだけだから、dashbordとか関係ないと思っていたんだけれど、じつはあらかじめこちらでapplication名を登録しておく必要があった、、、というだけのオチだった。
こんなことすら、解決するのに時間がかかりすぎる。スタートガイドには、下記のように書いてあったので、localhostでテストしてる段階では、アプリケーションIDの取得は不要かと思ってたのが間違いの始まりだった。

注: いったん登録したアプリケーション ID を削除することはできますが、削除後に同じアプリケーション ID を再登録することはできません。現段階で ID を登録しない場合は、これらのステップをスキップできます。 ( https://developers.google.com/appengine/docs/python/gettingstarted/uploading?hl=ja )

というワケで、まだまだ前途多難な感じなのである。
そして、expressionsってアプリケーションIDが使えなかったのは、また別のハナシである。
そして、とりあえずsample.csvを作ってapp.cfg upload_dataすると、またエラーなのである。

DatabaseError: file is encrypted or is not a database

うーむ。簡単なCSVファイルのはずなんだけれど、このファイルの何かがおかしいんだろうか。
appcfg.py download_dataすると、bulkloader.yamlにconnector:csvって書いてあるのと関係なく、csvじゃないファイルがdownloadされてくるみたいなので、この辺に何か秘密があるんだろうか。

なんで、たかだかCSVファイルをアップロードしてDB的に使おうとするだけで、こんなに苦労することになるんだろうか。

csvファイルの件解決

appcfg.py upload_data する時に、connecter: csvって書いてあるbulkloader.yamlを明示的に指定すると、ちゃんとできそうな感じがした。https://developers.google.com/appengine/docs/python/tools/uploadingdata を見ても、--config_file=bulkloader.yaml を指定しろって書いてないから、デフォルトで読み込まれてるのかと思ってた。
問題はもう一つあって、元々Getting Startedのhelloworldを忠実になぞってから、いろいろ書き換えてたというところに原因があるんだけれど、index.yamlが作成されてて、それがずっと残ったままになってた。
index.yamlに記載されているkindと、今回upload_dataしたいCSVファイルを保持したいkindとが噛み合ってないせいか、エラーになった。
とりあえず、index.yamlは削除。削除したら自動生成されるだろうと思っていたら、生成されない。あれ?
そして、この状態でdeployしても、appspot側にはまだ古いindex.yamlが残ってるっぽい。あれ?

appcfg.py vacuum_indexes app

にたどり着くまでに、それから1時間くらいかかった。
なんだかんだあって、ひとまずサーバ側にbulkloaderを使ってファイルをアップロードできるようになったのだけれど、このアップロードしたデータをlocalhostの開発環境で使う方法が分からない。コレが、今のところの悩み。