modify: 网关拆为独立包 chongming-gateway(源码迁出到 utils/gateway,打包只留 plugins.mbank)
This commit is contained in:
+2
-1
@@ -84,8 +84,9 @@ use_embedded_broker = true
|
||||
# 详细参数参考: https://github.com/Yakifo/amqtt
|
||||
|
||||
[production.module_system]
|
||||
# 运行期模块银行加载清单(frozen 产物用):网关本体是普通依赖包(chongming-gateway,
|
||||
# 已由 PyInstaller/Nuitka 打进产物),只有内置插件经模块银行加载。
|
||||
path = [
|
||||
"resources/app.mbank",
|
||||
"resources/plugins.mbank",
|
||||
]
|
||||
type = "module-bank"
|
||||
|
||||
+10
-8
@@ -18,22 +18,22 @@ import os
|
||||
import platform
|
||||
import sys
|
||||
from multiprocessing import freeze_support
|
||||
from pathlib import Path
|
||||
|
||||
import server # noqa: F401 # 预加载:master 内完成模块银行装载,fork 出的 worker 共享
|
||||
import server # noqa: F401 # 预加载:master 内完成插件模块银行装载,fork 出的 worker 共享
|
||||
import uvloop # noqa: F401 # 显式导入保证打包时收集 uvloop(uvicorn/granian loop 依赖)
|
||||
from chongming import RELOAD_PATHS # 热重载监听目录(网关包内定义)
|
||||
from chongming.app.core.logger import get_logger
|
||||
from chongming.app.core.parent_death import guard_parent_death
|
||||
from utils.launch import launch
|
||||
from uvicorn.workers import UvicornWorker
|
||||
|
||||
use_shell = platform.system() == "Windows"
|
||||
|
||||
# 未设置 APP_SERVER 时的平台默认(保持现状)
|
||||
DEFAULT_SERVER = "uvicorn" if use_shell else "gunicorn"
|
||||
# DEFAULT_SERVER = "uvicorn" if use_shell else "gunicorn"
|
||||
DEFAULT_SERVER = "granian"
|
||||
SUPPORTED_SERVERS = ("gunicorn", "uvicorn", "granian")
|
||||
|
||||
# 热重载(reload=true)监听的源码目录,避免 granian 默认扫 cwd 时被 logs/ 写日志触发
|
||||
RELOAD_PATHS = [Path("src/chongming"), Path("src/plugins")]
|
||||
|
||||
|
||||
class UvloopUvicornWorker(UvicornWorker):
|
||||
CONFIG_KWARGS = {"loop": "uvloop"}
|
||||
@@ -134,8 +134,6 @@ def app_run(app_config: dict, default_config: dict):
|
||||
Returns:
|
||||
None: 此函数不返回值,直接启动服务器并阻塞运行
|
||||
"""
|
||||
from app.core.logger import get_logger # type: ignore
|
||||
|
||||
logger = get_logger("app")
|
||||
|
||||
params = _server_params(app_config)
|
||||
@@ -182,6 +180,10 @@ def main():
|
||||
Returns:
|
||||
None: 此函数不返回值,调用launch函数启动应用
|
||||
"""
|
||||
# 父进程死亡防护(master 侧):引导进程(onefile 引导/终端 shell)死亡时
|
||||
# ——含被 SIGKILL——内核给本进程发 SIGTERM,granian 走优雅停机收掉全部 worker;
|
||||
# worker 侧在 app 的 lifespan 里各自设置(PR_SET_PDEATHSIG 不跨 fork 继承)。
|
||||
guard_parent_death(get_logger("app"))
|
||||
freeze_support()
|
||||
launch(app_run, "production")
|
||||
|
||||
|
||||
+6
-7
@@ -3,18 +3,17 @@ import sys
|
||||
from utils.launch import init_module_bank
|
||||
from utils.config import ConfigLoader
|
||||
|
||||
# 加载配置文件并初始化模块银行
|
||||
# 加载配置文件并初始化模块银行(当前只剩内置插件 plugins.mbank)
|
||||
config = ConfigLoader("config.toml")
|
||||
init_module_bank(config)
|
||||
|
||||
# 从数据库动态导入 app 模块
|
||||
# 该模块存储在 SQLite 数据库中,通过自定义导入机制加载
|
||||
# 网关本体是普通依赖包(chongming-gateway),直接导入即可——打包时
|
||||
# PyInstaller/Nuitka 也沿这行静态收集网关及其依赖。
|
||||
# 插件(plugins 包)由上面的模块银行提供,在 lifespan 启动时被网关按配置加载。
|
||||
try:
|
||||
import app # type: ignore
|
||||
|
||||
app_instance = app.app
|
||||
from chongming.app import app as app_instance
|
||||
except ImportError as e:
|
||||
print(f"无法从数据库导入 app 模块: {e}")
|
||||
print(f"无法导入网关(chongming.app): {e}")
|
||||
sys.exit(1)
|
||||
|
||||
# 暴露 ASGI 应用实例,供 uvicorn 服务器使用
|
||||
|
||||
Reference in New Issue
Block a user