普段Google App Engineを使っている人には当然なのかもしれないけど、今回ハマったので、メモ代わりに投稿。ちなみに使っていたのはGoogle App Engine for Goです。
デプロイ作業中に中断したとき
マシンが固まりそうだったので、「よろしくないな」と思いつつ、デプロイ作業を中断した結果の画面が以下。
$ goapp deploy -oauth
09:22 PM Application: takuan-osho; version: 1
09:22 PM Host: appengine.google.com
09:22 PM
Starting update of app: takuan-osho, version: 1
09:22 PM Getting current resource limits.
09:22 PM Scanning files on local disk.
09:22 PM Cloning 14 static files.
09:22 PM Cloning 90 application files.
^Cgoapp: caught SIGINT, waiting for appcfg.py to shut down
09:22 PM Interrupted.
error while running appcfg.py: exit status 1
はい、中断されました。
再度アップロードし直そうとして失敗
で、もう一回デプロイし直そうとしたら、以下。
$ goapp deploy -oauth
09:22 PM Application: takuan-osho; version: 1
09:22 PM Host: appengine.google.com
09:22 PM
Starting update of app: takuan-osho, version: 1
09:22 PM Getting current resource limits.
09:22 PM Scanning files on local disk.
Error 409: --- begin server output ---
Another transaction by user shimizu.taku is already in progress for app: s~takuan-osho, version: 1. That user can undo the transaction with "appcfg rollback".
--- end server output ---
error while running appcfg.py: exit status 1
appcfg rollback
してやり直せ、タコ!というエラーが出たので、それに従いましょう。そう思い、やろうとしたら、appcfg
なんて無いよー!という事態に。
実は単純なことだった
最初に書いていたように使っていたのはGoogle App Engine for Goなのですが、Google App Engine SDK for Goに含まれているのはappcfg
じゃなくてappcfg.py
でした。
なので以下のような使い方で同じように使えます。のところはapp.yaml
とかGoogle App Engineの設定ファイルが置いてあるディレクトリを指定すれば良いはずです。
appcfg.py [options] rollback <directory> | <file>
記憶が確かなら、appcfg
なのはPythonの方のSDKで、Google App Engine SDK for Goの内部ではPython使っていてエラーメッセージがPythonの方と共通だから少し齟齬が発生していたのかな?と予想します。
で、以下のようにして無事ロールバックできて、デプロイもちゃんと出来るようになりました。
$ appcfg.py --oauth2 rollback .
09:22 PM Application: takuan-osho
09:22 PM Host: appengine.google.com
09:22 PM Rolling back the update.
めでたしめでたし。