9

Rest エンドポイントと Web エンドポイントを持つアプリケーションがあります。

dev_appserver.py を使用して REST と WEB サービスの両方をローカルで実行したい

私は次のことを試しました

dev_appserver.py rest_app.yaml --port=5010 --admin_port=8000

dev_appserver.py web_app.yaml --port=5011 --admin_port=8001

サービスの 1 つ (残りのサービス) で次のエラーが表示されます。

`OperationalError: database is locked`

これらの両方のサービスが条件なしで共有データベースに読み書きできるようにするために、何か特別なことをする必要がありますか (または同様の悪いこと!!)

私の目標は、複数のサービス (この場合は REST と Web) をローカルで実行することであり、これらのサービスはデータを提供する必要があります。これを(dev_appserver.pyをローカルで使用して)およびGAE自体で行う最良の方法は何ですか(これは、後でアプリケーションをGAEにプッシュするときに行われます:D)

4

1 に答える 1

13

取得している理由OperationalError: database is lockedは、2 つのdev_appserver.pyインスタンスが同じデータベースのローカル ストレージ ディレクトリにアクセスしようとして衝突するためです。デフォルトでは、アプリの名前に基づいて決定されます。同じアプリの 2 つのサービスと同じです。

このような衝突を回避する 1 つの方法は、 dev_appserver.py--storage_pathオプションの引数を使用して、ローカル ストレージ ディレクトリも指定することです (これは で確認できますdev_appserver.py --help)。

--storage_path PATH   path to the data (datastore, blobstore, etc.)
                      associated with the application. (default: None)

ただし、2 つの異なるストレージ パスを使用すると、予期しない結果が生じる可能性があります。サービスがそのストレージ内の同じ情報を参照する場合、異なる値が表示される可能性があります。

同じアプリの複数のサービスを使用する適切な方法はdev_appserver.py、単一のdev_appserver.pyインスタンスを介してすべてのサービスを実行することです。これにより、各サービスに異なるポートが割り当てられます。

たとえば、3 つのサービスがあり、ディスパッチ ファイルを使用するアプリがあります。これは、3 つのサービス ディレクトリの親ディレクトリであるアプリ ディレクトリから開発サーバーを呼び出す方法です (ディスパッチ ファイルは、.yamlファイル引数のリストの最初のファイルである必要があり、常にデフォルト モジュールのファイルが続きます。ケースmain/main.yaml):

/usr/bin/python2.7 /usr/local/google_appengine/dev_appserver.py --host 0.0.0.0 --log_level=debug dispatch.yaml main/main.yaml buildin/buildin.yaml apartci/apartci.yaml

これは、サーバーの起動時に表示される、各サービスがリッスンするポートを devserver が自動的に割り当てる方法です。

INFO     2016-11-18 14:20:53,329 api_server.py:205] Starting API server at: http://localhost:40310
INFO     2016-11-18 14:20:53,330 dispatcher.py:185] Starting dispatcher running at: http://0.0.0.0:8080
INFO     2016-11-18 14:20:53,345 dispatcher.py:197] Starting module "default" running at: http://0.0.0.0:8081
INFO     2016-11-18 14:20:53,353 dispatcher.py:197] Starting module "buildin" running at: http://0.0.0.0:8082
INFO     2016-11-18 14:20:53,361 dispatcher.py:197] Starting module "apartci" running at: http://0.0.0.0:8083
INFO     2016-11-18 14:20:53,362 admin_server.py:116] Starting admin server at: http://localhost:8000
于 2016-11-18T14:50:05.210 に答える