2008年7月29日火曜日

[Google App Engine]Bulk Data Uploaderでデータをまとめてインポートする

まあ基本的にはマニュアルのとおりなんだけど、一カ所つまづいたのでメモしておきます。ちなみに開発環境の話です。

Loaderクラスを継承したクラスを書いてapp.yamlにエンドポイントを追加してCSVを用意した後
さあデータをアップロードするぞというところで。

./bulkload_client.py --filename people.csv \
--kind Person \
--url http://localhost:8080/load
[中略]
INFO 2008-07-29 10:23:56,365 bulkload_client.py] Importing 6 entities in 101 bytes
ERROR 2008-07-29 10:23:56,461 bulkload_client.py] An error occurred while importing: Received code 302: Requires login
ERROR 2008-07-29 10:23:56,462 bulkload_client.py] Import failed

ログインしてないよというエラーが発生します。

このエラーはbulkload_client.pyにcookieオプションをつけると解決するようです。
(aml.yamlの login: admin を削除すると上手く動くようですが、これは推奨できませんよね。)

./bulkload_client.py --filename people.csv \
--kind Person \
--url http://localhost:8080/load \
--cookie dev_appserver_login="test@example.com:True"
[中略]
INFO 2008-07-29 10:31:49,206 bulkload_client.py] Importing 6 entities in 101 bytes
INFO 2008-07-29 10:31:49,507 bulkload_client.py] Import succcessful


アプリ上でログインした後もtest@example.com:False になっている場合でも、test@example.com:Trueと手動で書き換えれば問題なく動作するようです。

[7/ 30追記]
本番環境にアップロードするのも基本的には同じです。
Googleにログインした状態で下のURLにアクセスすると
http://<yourapp>.appspot.com/load
The bulk load endpoint is: http://<yourapp>.appspot.com/load
Pass this flag to the client: --cookie='ACSID=AJKiYcFGvAqWeiQBFIeybzvHdi-NzXwSCEHHCFBpupSdRbzxamvzdR7qfYma0VZjm6i23Ujea2T...

という画面を見ることができるはずです。
そこに記載されているcookieをコピペして、ローカルのマシンでコマンドを叩くだけ
./bulkload_client.py --filename people.csv \
--kind Person \
--url http://<yourapp>.appspot.com/load \
--cookie ACSID=AJKiYcGf8BeBcd[中略]
INFO 2008-07-30 16:59:58,015 bulkload_client.py] Importing 9 entities in 234 bytes
INFO 2008-07-30 16:59:59,055 bulkload_client.py] Import succcessful



Porting legacy databases to Google App Engine
(http://thomas.broxrost.com/)

1 件のコメント:

hajimalih さんのコメント...

I just wanna say thank you for the information that you have been shared to us readers. Thanks for posting this kind of theme. mesothelioma