fix: 数据目录移出安装目录,修掉「覆盖安装/卸载即丢数据」
根因:数据目录是 <安装目录>\data(config.yaml 的 dataDir 相对服务端工作目录),
而 electron-builder 的卸载器结尾执行 RMDir /r $INSTDIR,且覆盖安装会先跑旧卸载器
(installSection.nsh:52 的 uninstallOldVersion)→ 赛事库/规则/用户/审计/上传图片
连同安装目录被整个删除,再装新版。卸载一次同样如此。
- 服务端新增 -data <dir>(主命令、backup、passwd 三处),非空时覆盖 config.yaml 的
dataDir;不传时行为完全不变(兼容便携/手工运行)
- Console 把数据指到当前用户目录 %LOCALAPPDATA%\ScoreboardConsole\data(卸载器不会碰
这里;没有用 app.getPath('userData'),因为 %APPDATA%\<AppName> 正是被删的那个)
- 一次性迁移:目标为空且 <安装目录>\data 有数据时整体改名过去;两边都有数据时不动作
只记警告;任何失败都保留原地数据、绝不删除
- passwd 也带 -data(否则重置的是安装目录下那个空库里的账号)
- deploy/backup.bat 指向同一数据目录
- 文档:部署指南新增「数据放在哪里(升级/卸载都不会删)」+ 备份/恢复/迁移路径改写,
上线检查清单与使用手册同步
自检:服务端 12 包全绿;console 语法 14 文件 + datadir 单测 11/11;backup.bat 保持纯 ASCII。
This commit is contained in:
1 parent
6483acf9ad
commit
005b51b2ec
18 files changed
+626
-64
No files matched your search
+15
-8
@@ -4,10 +4,14 @@ REM Scoreboard one-click backup (Windows)
|
||||
REM
|
||||
REM Calls scoreboard.exe's backup subcommand (VACUUM INTO), so it is safe to
|
||||
REM run while the service is up and does not need an external sqlite3.exe.
|
||||
REM Output goes to data\backups\; the server keeps the newest 20 per DB
|
||||
REM Output goes to <data dir>\backups\; the server keeps the newest 20 per DB
|
||||
REM (system / each event).
|
||||
REM The data dir is the one the Console uses, i.e. %LOCALAPPDATA%\ScoreboardConsole\data
|
||||
REM (falling back to <root>\data when that does not exist yet). It lives outside
|
||||
REM the install dir on purpose: reinstalling over an existing install wipes the
|
||||
REM install dir, so data must not be kept there.
|
||||
REM NOTE: only .db snapshots are taken. Background images / emblems under
|
||||
REM data\event_projs\<project>\uploads\ are NOT included; copy that
|
||||
REM <data dir>\event_projs\<project>\uploads\ are NOT included; copy that
|
||||
REM directory separately if you need them on the archive.
|
||||
REM
|
||||
REM Usage: deploy\backup.bat manual backup (reason=manual)
|
||||
@@ -21,7 +25,9 @@ chcp 65001 >nul 2>&1
|
||||
|
||||
cd /d "%~dp0.."
|
||||
set "ROOT=%CD%"
|
||||
REM Same data dir the Console hands to the server via -data.
|
||||
set "DATA=%ROOT%\data"
|
||||
if defined LOCALAPPDATA if exist "%LOCALAPPDATA%\ScoreboardConsole\data" set "DATA=%LOCALAPPDATA%\ScoreboardConsole\data"
|
||||
set "REASON=manual"
|
||||
|
||||
if not "%~1"=="" set "REASON=%~1"
|
||||
@@ -32,7 +38,8 @@ set "REASON=%REASON:"=%"
|
||||
|
||||
if not exist "%DATA%" (
|
||||
echo [ERROR] data directory not found: %DATA%
|
||||
echo Run this script from the project root.
|
||||
echo Start Scoreboard_Console.exe once so the service creates it,
|
||||
echo or point this script at the data dir via -data manually.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
@@ -48,10 +55,10 @@ if not defined EXE (
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM dataDir is relative and resolved against the current directory by the server,
|
||||
REM so this script must run from the project root.
|
||||
REM config.yaml is still needed for port / backup settings; -data below picks the
|
||||
REM data dir explicitly, so the current directory no longer decides it.
|
||||
if not exist "%ROOT%\config.yaml" (
|
||||
echo [ERROR] %ROOT%\config.yaml not found, cannot locate dataDir.
|
||||
echo [ERROR] %ROOT%\config.yaml not found.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
@@ -70,12 +77,12 @@ set "FOUND="
|
||||
for /d %%D in ("%DATA%\event_projs\*") do (
|
||||
set "FOUND=1"
|
||||
echo backup event %%~nxD
|
||||
"%EXE%" backup -config config.yaml -project "%%~nxD" -reason "%REASON%"
|
||||
"%EXE%" backup -config config.yaml -project "%%~nxD" -data "%DATA%" -reason "%REASON%"
|
||||
if errorlevel 1 (set /a FAIL+=1) else (set /a OK+=1)
|
||||
)
|
||||
if not defined FOUND (
|
||||
echo backup default event
|
||||
"%EXE%" backup -config config.yaml -reason "%REASON%"
|
||||
"%EXE%" backup -config config.yaml -data "%DATA%" -reason "%REASON%"
|
||||
if errorlevel 1 (set /a FAIL+=1) else (set /a OK+=1)
|
||||
)
|
||||
|
||||
|
||||
Reference in new issue
Block a user