私は Python と Pyramid に慣れていないので、ここで間違ったことをしようとしている場合は申し訳ありません。
現在、次のエントリポイントを使用して、Docker コンテナー内で Pyramid アプリケーションを実行しています。
pipenv run pserve development.ini --reload
これにより、アプリケーションが正しく機能し、コンテナー内でコードを直接編集できるようになります。これはすべてうまくいきます。次に、このサービスを Netflix の Eureka Service Registry のインスタンスに登録して、ゲートウェイ (Netflix Zuul など) を使用してこのサービスにプロキシできるようにしました。私はこれを達成するために Eureka の REST API を使用しましたが、これはすべて正常に機能しました。
ただし、Pyramid サービスをシャットダウンするときは、追加の HTTP 要求を Eureka に送信して、登録済みのサービスを削除したいと考えています。 Zuul がダウンしたサービスにリクエストをプロキシしている可能性があります。
問題は、Pyramid でシャットダウン イベントを実行する方法を確実に見つけることができないことです。基本的に、Docker コンテナーを停止すると、サービスは終了コード 137 (kill -9 の結果だと思います) を受け取り、何も起こりません。atexit と SIGKILL、SIGTERM、SIGINT などのシグナル イベントを使用しようとしましたが、何も起こりません。--reload フラグを指定せずに pserve を実行してみましたが、それでもうまくいきません。
サーバーとドッカーコンテナーがシャットダウンする直前に、この DELETE イベントを確実に送信する方法はありますか?
これは私が使用している development.ini ファイルです:
[app:main]
use = egg:my-app
pyramid.reload_templates = true
pyramid.includes =
pyramid_debugtoolbar
pyramid_redis_sessions
pyramid_tm
debugtoolbar.hosts = 0.0.0.0/0
sqlalchemy.url = mysql://root:root@mysql/keyblade
my-app.secret = secretkey
redis.sessions.secret = secretkey
redis.sessions.host = redis
redis.sessions.port = 6379
[server:main]
use = egg:waitress#main
listen = 0.0.0.0:8000
# Logging Configuration
[loggers]
keys = root, debug, sqlalchemy.engine.base.Engine
[logger_debug]
level = DEBUG
handlers =
qualname = debug
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = INFO
handlers = console
[logger_sqlalchemy.engine.base.Engine]
level = INFO
handlers =
qualname = sqlalchemy.engine.base.Engine
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s