# answer **Repository Path**: yanjingtu/answer-v3 ## Basic Information - **Project Name**: answer - **Description**: 答题系统 - **Primary Language**: Unknown - **License**: ISC - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-10-23 - **Last Updated**: 2026-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # answer-v3 ## Project setup ``` npm install ``` ### Compiles and hot-reloads for development ``` npm run serve ``` ### Compiles and minifies for production ``` npm run build ``` ### Customize configuration See [Configuration Reference](https://cli.vuejs.org/config/). ## 部署说明 本系统前后端一体:前端构建产物与初始配置(`users.json` / `exams.json`)通过 `go:embed` 内嵌进单个 Go 二进制,便于离线单文件部署。 ### 1. 单文件构建 ```bash ./server/build.sh # 构建当前平台 GOOS=windows GOARCH=amd64 ./server/build.sh # 交叉编译 Windows 版 GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=0 ./server/build.sh # ARMv7 静态版 ``` 产物为 `server/answer-v3-server`(前端 + 配置已内嵌)。运行: ```bash ./server/answer-v3-server # 默认端口 9001 # 可用环境变量覆盖:PORT / DATA_DIR / CONFIG_DIR / DIST_DIR ``` > 若未设置 `DIST_DIR` 且目录下也没有 `dist`,程序会自动回退到二进制内嵌的前端;初始用户/考试数据同理回退到内嵌的 `config`。 ### 2. 编程题判题(OJ 沙箱) 判题在子进程中编译并运行 C++,需本机安装有 `g++`: - **Linux**:使用 `unshare`+`setpriv`+`ulimit` 的轻量命名空间沙箱,无需额外配置。 - **Windows**:使用 Job Object 限制内存 + 墙钟超时;**不捆绑编译器**,需自行安装并指定位置。 - 安装 [TDM-GCC](https://jmeubank.github.io/tdm-gcc/)(Dev-C++ 同款)或 MinGW-w64。 - 通过环境变量 `GPP_PATH` 指向 `g++.exe`,例如: ```bash set GPP_PATH=D:\Green\TDM-GCC-64\bin\g++.exe ``` - 未设置 `GPP_PATH` 时自动在 `PATH` 上查找 `g++.exe` / `g++`。 ### 3. 杀毒软件例外(重要) 判题时会把用户提交的代码编译成临时可执行文件 `prog.exe`(位于系统临时目录 `%TEMP%/answer-oj-*` 下),并在沙箱中执行。 **杀毒软件可能拦截该文件或对其首跑进行扫描**,导致两类问题,务必加例外: - 拦截 `prog.exe` → 执行报 `Access denied`,判为 RE / 编译失败; - 首跑被扫描 → 进程冷启动变慢(可达数秒),被判题逻辑误判为 **TLE**。 请将以下目录加入杀毒软件的白名单 / 排除项: - **server 程序所在目录**(及其数据目录 `DATA_DIR`),避免内嵌前端释放或数据写入被拦; - **系统临时目录中的 `answer-oj-*` 前缀目录**,即 `%TEMP%`(或 Windows 临时目录)下所有 `answer-oj-*`; - 若希望更精确,可在部署时固定临时目录(如 `set TMPDIR=D:\oj-tmp`)并把该目录整体加例外。 > 经验:离线练习机(如孩子暑假刷题的 Win10 笔记本)建议直接把 server 目录与临时目录都加排除,否则每次提交都可能被拦截或误判。 ### 环境变量一览 | 变量 | 说明 | 默认 | |------|------|------| | `PORT` | HTTP 监听端口 | `9001` | | `DATA_DIR` | SQLite 数据存储目录 | 程序目录下 `data` | | `CONFIG_DIR` | 初始配置(`users.json`/`exams.json`)目录;不存在则回退内嵌 | 程序目录下 `config` | | `DIST_DIR` | 前端静态目录;不存在则回退内嵌 | 程序目录下 `dist` | | `GPP_PATH` | Windows 下 `g++.exe` 路径 | 自动查找 `PATH` | | `OJ_DEBUG` | 设为 `1` 时打印判题调试日志 | 关闭 | | `NO_OPEN_BROWSER` | 设为 `1` 时禁止启动后自动打开默认浏览器(仅 Windows 生效) | 关闭(Windows 自动弹窗) |