また、そのサーバーに直接リクエストを送信する方法はありますか?
5 に答える
実際には方法があり、アプリケーションのすべてのインスタンスに新しいデータをプッシュするのに役立ちます。
from google.appengine.api import modules
instance_id = modules.get_current_instance_id()
いいえ、ありません。
通常、誰かがこのようなことを尋ねると、AppEngineで間違った方向に向かっています。フロントエンドサーバーは常に起動およびシャットダウンします。特定のインスタンスに依存するものを設計している場合、それは間違っています。どのインスタンスにヒットしても機能するリクエストを設計する必要があります。
必要な場合は、バックエンドの使用を検討してください。
何の目的で?
異なるバージョンをテストしたい場合は、トラフィック分割https://developers.google.com/appengine/docs/adminconsole/trafficsplittingを使用できます
ただし、これは異なるバージョンであり、特定のインスタンスではありません。
Python と日時スタンプを使用してインスタンスを識別します。このインスタンス ID は appengine_config.py によって設定されます。他のインスタンスにシグナルを送るために、memcache でフラグを使用します。これは__init__
、webapp2 リクエスト ハンドラーによってチェックされます。別の方法が見つからなかったため、他のインスタンスへのシグナルを使用して jinja 環境をフラッシュし、動的な Python コードをリロードします。
memcache フラグの例を次に示します。インスタンス ID によって設定されたすべての動的モジュールをリロードするためのシグナリング: '2012-12-26 16:39:50.072000'
{ u'_all': { u'dyn_reloads_dt': datetime.datetime(2012, 12, 26, 16, 39, 59, 120000),
u'setter_instance': '2012-12-26 16:39:50.072000'}}
Ibrahim Arief から の機能リクエストにスターを付けました。
With the advent of Modules, you can get the current instance id in a more elegant way:
ModulesServiceFactory.getModulesService().getCurrentInstanceId()
Also, according to this doc, you can route requests specifically to a particular instance by using a URL like
http://instance.version.module.app-id.appspot.com
Note that you need to replace the dot with -dot-
to suppress the SSL certificate warning your web client may be complaining about:
http://instance-dot-version-dot-module-dot-app-id.appspot.com