modify: 视频推流
This commit is contained in:
+15
-2
@@ -21,13 +21,22 @@ async def create_workers(session, config, count=1, worker_manager=None):
|
||||
db = Database(db_path)
|
||||
await db.initialize()
|
||||
|
||||
# 初始化管理员
|
||||
# 初始化管理员(多进程并发启动时必须幂等,避免 UNIQUE 约束冲突)
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
async with db.get_session() as sess:
|
||||
select_stmt = select(Users) \
|
||||
.where(Users.username == "admin") # type: ignore
|
||||
result = await sess.execute(select_stmt)
|
||||
user: Users | None = result.scalar_one_or_none()
|
||||
|
||||
# 按用户名未命中时,再按邮箱兜底,避免历史数据中已存在同邮箱用户
|
||||
if user is None:
|
||||
select_stmt = select(Users) \
|
||||
.where(Users.email == "admin@example.com") # type: ignore
|
||||
result = await sess.execute(select_stmt)
|
||||
user = result.scalar_one_or_none()
|
||||
|
||||
if user is None:
|
||||
user = Users(
|
||||
username="admin",
|
||||
@@ -38,7 +47,11 @@ async def create_workers(session, config, count=1, worker_manager=None):
|
||||
is_superuser=True
|
||||
)
|
||||
sess.add(user)
|
||||
await sess.commit()
|
||||
try:
|
||||
await sess.commit()
|
||||
except IntegrityError:
|
||||
# 其他并发进程已抢先创建 admin,当前进程忽略即可
|
||||
await sess.rollback()
|
||||
|
||||
set_global_var("db", db)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user