数据库与奖励投递
SQLite、MySQL、多服共享、重试与维护
数据库与奖励投递
SQLite 单服
SQLite 文件必须位于 plugins/Ritual/ 中,并使用相对路径。不要让多个服务端进程同时打开同一个 SQLite 文件。
MySQL 多服
多个子服共享签到状态时,所有 Ritual 节点必须:
- 连接同一套 MySQL;
- 使用相同的
timezone; - 使用相同的
rotation.anchor-monday; - 保持系统时间同步。
SystemMail 也须按照其多服方案共享 MySQL 与 Redis。
投递可靠性
玩家出勤和邮件投递状态分开保存。签到成功后,即使 SystemMail 暂时离线,出勤记录也不会回滚,也不要求玩家重新签到。
同一份奖励使用固定发放标识,防止服务器重启、处理超时或多节点竞争造成重复邮件。
- 临时失败会自动重试;
- 请求内容无效、邮件去重冲突等无法自行恢复的问题会立即暂停;
- 其他失败达到
delivery.max-attempts后暂停; - 管理员解决 SystemMail、数据库或奖励配置问题后,从 Ritual 告警日志中的
记录 <ID>取得奖励记录 ID,再使用/ritual retry <奖励记录ID>恢复处理。
玩家界面保持打开时,邮件成功或进入暂停状态后会自动更新。
不要直接删除待发送记录。人工处理前应备份数据库,并确认 SystemMail 中是否已有对应邮件。只删除 Ritual 数据库后,SystemMail 仍可能保留同一玩家、周次和奖励位置的去重记录;内容变化时重发会发生冲突。生产环境应恢复配套备份,不要清空 SystemMail。
