## 任务占用与边界 - 任务名称:修复 operations_replica 生产驱动崩溃 - 实际开发者:WuYongJie - 任务来源/团队分工:生产快照恢复 - 目标结果:生产 Linux 容器不再通过会崩溃的 PDO_ODBC 访问 FreeTDS;保留固定只读查询、共享系统数据库凭据来源和私有隧道。 - 预计修改路径:deploy/Dockerfile;modules/EcommerceFinance/Services/UpstreamOdbcConnection.php;tests/Unit/EcommerceFinance/UpstreamOdbcConnectionTest.php - 预计页面或路由:公司、店铺、商标信息页的共享快照读取 - 预计 Controller / Repository:UpstreamOdbcConnection;UpstreamReadOnlyQuery - 数据源、表/视图和字段:operations_replica 固定只读查询;不新增上游写入、全表同步或业务字段。 - 上游 source_key / scope:operations_replica;company-information.read、store-information.read、trademark-information.read - 权限名、菜单键或共享组件:不变 - 明确不修改的范围:上游账号、密码、权限、表结构、业务数据、Windows/本地 ODBC 行为 ## 开工碰撞检查 - [x] Codex 已执行 scripts/codex-task-preflight.ps1 - [x] 已检查最新 main 和所有远程任务分支 - [x] 已搜索主线既有页面、接口、Repository 和数据查询 - [x] 未发现重叠 ## 实际改动 - 完成内容:开发中 - Codex 实际修改的文件:待补充 - 新增或变更的公共契约:仅 Linux 容器内的 FreeTDS PDO 传输选择;不新增外部配置项 - 与原计划的差异:无 ## 验证证据 - 正常流程:同一共享配置和私有隧道下,FreeTDS 命令行 SELECT 1 已成功;PDO_ODBC 独立进程退出码 139。 - 空数据/错误输入/无权限场景:待补充自动测试。 - 受影响旧功能:Windows/本地仍使用既有 ODBC。 - 自动测试及结果:待补充。 - 实际页面、接口或只读业务查询结果:待合并和获准发布后生成三份首份快照。 ## 风险检查 - [ ] 不涉及金额、权限、审批、数据库迁移、生产配置或数据修复 - [x] 如涉及上述高风险内容,已在下方写明影响、回滚和所需授权 - [x] 未提交 .env、密码、Token、私钥、真实财务数据、生产日志或构建产物 - [x] 前端改动符合 DESIGN.md;无前端改动则写“不适用” 高风险影响、回滚和授权状态:需要构建新的应用镜像并经生产最小只读查询验证;不迁移、不改上游数据。若验证失败,发布脚本自动保留上一个可回滚镜像。 ## 合并前复查 - [ ] 已重新拉取远程引用并用实际修改范围再次运行碰撞检查 - [ ] PR 不再是 WIP:,所有测试结果已经补齐 - [ ] Codex 已重新读取原始需求和验收标准,并逐文件审核 origin/main...任务分支 的完整 diff - [ ] Codex 自审确认无越界修改、重复实现、敏感内容、未处理冲突和未验证结果 - [ ] 合并顺序不会覆盖其他未合并任务 - [x] 已授权当前任务的 Codex 执行 Squash merge、验证 main 并清理任务分支 - [ ] 如涉及生产迁移、数据修复、删除、覆盖配置或部署,已另行取得对应高风险授权 Reviewed-on: http://git.1080p.hk/WuYongJie/CaiWuXiTong/pulls/9
72 lines
3.0 KiB
PHP
72 lines
3.0 KiB
PHP
<?php
|
|
|
|
return [
|
|
'development' => [
|
|
// 本地开发环境直接执行代码中登记的只读查询,不等待生产刷新节点或共享范围开放。
|
|
// 凭据仍统一从系统数据库读取,开发者不需要填写两套上游连接。
|
|
'direct_read' => env('APP_ENV', 'production') === 'local',
|
|
],
|
|
|
|
'snapshots' => [
|
|
// 统一使用系统数据库,确保所有受信任开发环境复用同一份按需快照。
|
|
'cache_store' => env('UPSTREAM_SNAPSHOT_CACHE_STORE', 'upstream_shared'),
|
|
// 页面只登记需求并读取共享快照;首次取数统一交给后台刷新节点。
|
|
'allow_inline_refresh' => false,
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| 上游数据源登记表
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| 每个来源使用独立配置、缓存命名空间、查询预算和熔断状态。新增来源时
|
|
| 只在代码中登记非敏感标识;生产凭据可在明确开启后加密保存到系统库,
|
|
| 并由同一套系统数据库登录凭据跨受信任开发环境解锁。
|
|
|
|
|
*/
|
|
'runtime' => [
|
|
// 只限制冷查询和后台刷新;共享快照命中不占槽位。
|
|
'max_concurrency' => (int) env('UPSTREAM_MAX_CONCURRENCY', 4),
|
|
'slot_wait_ms' => (int) env('UPSTREAM_SLOT_WAIT_MS', 1500),
|
|
// 开发机可覆盖系统数据库中记录的 ODBC 驱动名。
|
|
'odbc_driver' => env('UPSTREAM_ODBC_DRIVER'),
|
|
],
|
|
|
|
'stored_configuration' => [
|
|
// 生产环境默认关闭;只允许在系统数据库和备份均已就绪后显式开启。
|
|
'enabled' => filter_var(env('UPSTREAM_STORED_CONFIG_ENABLED', false), FILTER_VALIDATE_BOOL),
|
|
],
|
|
|
|
'tunnel_endpoints' => [
|
|
// 仅生产环境使用的私有隧道端点。它只替换连接主机和端口,
|
|
// 数据库名、账号和密码仍从共享系统数据库读取,不能写入此处。
|
|
'jiansun' => [
|
|
'host' => env('UPSTREAM_TUNNEL_JIANSUN_HOST'),
|
|
'port' => env('UPSTREAM_TUNNEL_JIANSUN_PORT'),
|
|
],
|
|
'operations_replica' => [
|
|
'host' => env('UPSTREAM_TUNNEL_OPERATIONS_REPLICA_HOST'),
|
|
'port' => env('UPSTREAM_TUNNEL_OPERATIONS_REPLICA_PORT'),
|
|
],
|
|
],
|
|
|
|
'local_configuration' => [
|
|
// 开发机显式开启后完全使用本机私有来源配置,不读取共享密码。
|
|
'enabled' => filter_var(env('UPSTREAM_LOCAL_CONFIG_ENABLED', false), FILTER_VALIDATE_BOOL),
|
|
],
|
|
|
|
'sources' => [
|
|
'jiansun' => [
|
|
'label' => 'JianSun 旧业务库',
|
|
'config' => 'jiansun',
|
|
],
|
|
'operations_replica' => [
|
|
'label' => '经营分析副本库',
|
|
'config' => 'operations_replica',
|
|
// Linux 生产镜像中该来源经私有隧道使用 FreeTDS 的 PDO_DBLIB。
|
|
// Windows 和其他来源继续保持现有 PDO_ODBC 行为。
|
|
'use_pdo_dblib' => true,
|
|
],
|
|
],
|
|
];
|