4

元の dev_appserver を使用してローカルでリモート データストアにアクセスするには、ここで説明したように --default_partition=s を設定します

2013 年 3 月、Google は devappserver2 をデフォルトの開発サーバーにしましたが、これは --default_partition をサポートしていないため、元の恐ろしい結果になりました。

BadRequestError: app s~appname cannot access app dev~appname's data

最初のいくつかのリクエストは正しく処理されているようです

os.environ["APPLICATION_ID"] == 's~appname'

次に、後続のリクエストによって /_ah/warmup が呼び出され、次に

os.environ["APPLICATION_ID"] == 'dev~appname'

ドキュメントは特に関連するトピックについて言及していますが、dev_appserver hereを対象としているようです

警告!環境変数からアプリ ID を取得しないでください。開発サーバーは、本番環境の App Engine サービスをシミュレートします。これを行う 1 つの方法は、文字列 (dev~) を APPLICATION_ID 環境変数の先頭に追加することです。これは、高レプリケーション データストアを使用するアプリケーションの本番環境で先頭に追加される文字列に似ています。--default_partition フラグを使用してこの動作を変更し、本番環境の master-slave オプションと一致する値 "" を選択できます。Google では、常に get_application_id() メソッドを使用してアプリケーション ID を取得し、APPLICATION_ID 環境変数を使用しないことをお勧めします。

4

1 に答える 1

2

次の汚い小さなトリックを実行できます。

from google.appengine.datastore.entity_pb import Reference

DEV = os.environ['SERVER_SOFTWARE'].startswith('Development')

def myApp(*args): 
    return os.environ['APPLICATION_ID'].replace("dev~", "s~")

if DEV:
    Reference.app = myApp
于 2013-10-23T12:39:11.853 に答える