- msync 全部实现迁入 gvsdsdk(models/registry/ogm/transaction/auth + Django 集成层 middleware/sio/views/serializers/urls/admin/apps/migrations) - 新增 gvsdsdk/secrets.py(secrets.ini 读取)与 serializer_base.py (PascalCase DRF 序列化器基类) - msync 0001 迁移改用 gvsdsdk.models.UUIDField 并与模型 deep_deconstruct 完全对齐(消除 makemigrations 漂移),dependencies 置空 - msync apps.py 移除 gvsds.app_config 软依赖,域名仅经环境变量/settings 解析 - 验证:屏蔽 gvsds 包后 50 个 gvsdsdk 子模块独立导入通过
69 lines
2.6 KiB
Python
69 lines
2.6 KiB
Python
from django.apps import AppConfig
|
||
|
||
|
||
class MsyncConfig(AppConfig):
|
||
default_auto_field = 'django.db.models.BigAutoField'
|
||
name = 'gvsdsdk.msync'
|
||
verbose_name = '微服务通信'
|
||
verbose_name_plural = '微服务通信'
|
||
|
||
def ready(self):
|
||
# 仅在主进程启动时确保 gvsds-master 节点存在
|
||
import os
|
||
if os.environ.get('RUN_MAIN') == 'true' or not os.environ.get('RUN_MAIN'):
|
||
try:
|
||
self._ensure_master_node()
|
||
except Exception:
|
||
pass # 数据库可能尚未迁移
|
||
|
||
def _ensure_master_node(self):
|
||
from gvsdsdk.msync.models import ServiceNode, _utcnow
|
||
import uuid
|
||
|
||
service_domain = self._resolve_service_domain()
|
||
master_uuid = uuid.UUID('00000000-0000-0000-0000-000000000001')
|
||
|
||
try:
|
||
node = ServiceNode.objects.get(ServiceName='gvsds-master')
|
||
# 更新心跳、状态和元数据
|
||
node.ServiceStatus = 1
|
||
node.ServiceScope = ['*']
|
||
node.ServiceDomain = service_domain
|
||
node.ServiceType = 1
|
||
node.ServiceMetadata = {'DBName': 'Users'}
|
||
node.LastHeartbeat = _utcnow()
|
||
node.save(update_fields=['ServiceStatus', 'ServiceScope', 'ServiceDomain', 'ServiceType', 'ServiceMetadata', 'LastHeartbeat'])
|
||
except ServiceNode.DoesNotExist:
|
||
import bcrypt
|
||
secret = 'gvsds-master-internal'
|
||
secret_hash = bcrypt.hashpw(secret.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
|
||
node = ServiceNode(
|
||
ServiceUUID=master_uuid.bytes,
|
||
ServiceName='gvsds-master',
|
||
ServiceDomain=service_domain,
|
||
ServiceSecretHash=secret_hash,
|
||
ServiceScope=['*'],
|
||
ServiceStatus=1,
|
||
ServiceType=1,
|
||
ServiceMetadata={'DBName': 'Users'},
|
||
LastHeartbeat=_utcnow(),
|
||
)
|
||
node.SetSecret(secret)
|
||
node.save()
|
||
|
||
@staticmethod
|
||
def _resolve_service_domain():
|
||
"""解析主服务器公开域名:环境变量 → settings → 默认值(不依赖 gvsds)"""
|
||
import os
|
||
domain = os.environ.get('MSYNC_SERVICE_DOMAIN') or os.environ.get('APP_MSYNC_SERVICE_DOMAIN')
|
||
if domain:
|
||
return domain
|
||
try:
|
||
from django.conf import settings as _settings
|
||
domain = getattr(_settings, 'GVSDSDK_MSYNC_MASTER_URL', None)
|
||
if domain:
|
||
return str(domain).rstrip('/')
|
||
except Exception:
|
||
pass
|
||
return 'https://www.gvsds.com'
|