oj运行时错误_计算机 · 一些 OJ 的安装,简要数据库结构和备份

本文详细介绍HUSTOJ、UOJ、SYZOJ和Vijos等在线评测系统的安装流程与数据库结构,帮助管理员快速部署并理解各OJ的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

00a8e8c1e647a34c60ca2997032b93b1.png

(这其实是 OJ.Harmonics 的推广文章……

现在各种 OJ 都提供了或方便或麻烦的安装方法,本文主要对一些 OJ 的安装做一个总结,还有一些使用者有备份和转移 OJ 的需要,因此简要地介绍一下数据库结构。希望这篇文章能对 OJ 管理员们和竞赛老师们提供微小的帮助。

还记得这个回答和这篇文章吗?我回来填坑了!(划掉)

先统一谈一下卸载,直接把所有相关项都删掉可能行不通,所以建议直接重装。

再谈谈安装和数据库结构。

下面所有 OJ 均安装在 Ubuntu 下,十分特别非常不推荐将 OJ 装在 Windows 下,因为 NOI 系列比赛和 ACM 的测试环境均为 Linux,安装环境模拟比赛可以规避很多问题,并且 OJ 的开发均在 Linux 环境下,用 Linux 在安装时也省心很多。

下面的所有安装均在刚全新安装完 Ubuntu 的机器下完成。

1、HUSTOJ

HUSTOJ 作为采用量最大的 OJ,受到包括敝校的很多学校的欢迎。HUSTOJ 可以支持基本的题目测评和组建比赛的功能,包括 ACM 赛制的比赛和 OI 赛制的比赛,二次开发不十分方便,但是现有的文档数量比较多,如果想要快速部署,HUSTOJ 是一个比较好的选择。

安装十分方便,直接安装好 Ubuntu 16.04,然后按照这里操作即可,两行命令搞定。都是中文介绍十分方便。

十分感谢 zhblue 对于 HUSTOJ 的贡献,HUSTOJ 安装真心方便很多。

第一个注册的用户为超级管理员。

HUSTOJ 的数据库采用 MySQL。数据库名称为 jol

数据库结构如下:

de44ddce617f34da012f06fc9905933f.png

有些能看出来的就不说了,其中重要的是 problem 表。

problem 表内有如下内容:

1、problem_id:记录题目编号,为主键;

2、title:记录题目标题;

3、description:记录题目描述,用 HTML 风格存储,如果需要转入 SYZOJ 或 UOJ,可能需要一些操作;

4、input/output:记录题目输入输出,用 HTML 风格存储;

5、sample_input/sample_output:记录题目输入输出样例;

6、spj:记录题目有无 Special Judge,0 表示无,1表示有;

7、hint:记录题目提示,用 HTML 风格存储;

8、source:记录题目来源;

9、in_date:记录题目添加时间;

10、time_limit:记录题目时间限制,以秒为单位;

11、memory_limit:记录题目空间限制,以兆为单位;

12、defunct:记录题目是否为隐藏,N 为否,Y 为是;

13、accepted:记录题目 AC 人数;

14、submit:记录题目提交人数;

15、solved:记录解决此问题的提交数。

其中题面相关是 2~8,10,11 三个。

如果自己想看的话,可以在命令行中输入 mysql -u root -p,输入数据库密码后,输入 use jol,然后就可以随便搞了。

如果不知道数据库密码,默认是 root

还有两个很重要的文件夹:/home/judge/data,这个保存了所有题目的数据和 Special Judge,还有 /home/judge/src/web/upload,这个文件夹保存了所有上传到 Judge 上的文件,包括附件,图片和音视频等。

如果要转移,备份这两个文件夹和 jol 数据库即可。

(Judger 全 C 可还行……

2、Universal Online Judge(UOJ)

UOJ 作为一个比较新的 OJ,采用 docker 测评,很好地防御了卡测评的情况。对于 Hack 和博客的支持也很好,将其作为校内 OJ 是一个十分好的选择。并且页面美观,看着也很舒心。

不过可能不能装在太老的机器上。

先安装 docker,在这里搞定。

然后把 UOJ 仓库 clone 下来,放在 /home 下。

如果要测评 Java,请下载 JDK 那一套,如果不需要可以建一个空包,但是名字必须是 jdk-7u76-linux-x64.tar.gzjdk-8u31-linux-x64.tar.gz,放在 /home/<你的用户名>/uoj/docker 里。

然后在 /home/<你的用户名>/uoj 下直接 ./install,跑下载过程可能有点慢。

然后如果安装完成,会出现 Successfully built <image-id>,请务必记住后面的 <image-id>

然后改一下 hosts,在 /etc/hosts 下,直接 vim 搞定,注意加在第一行。

127.0.0.1 local_uoj.ac

最后 docker run -it -p 80:80 -p 3690:3690 <image-id>,在浏览器输入 local_uoj.ac即可。

第一个登录的用户为超级管理员。

每次开关机都需要启动 docker,可以添加开机启动任务。

UOJ 的数据库同样是 MySQL,但是需要启动 UOJ 才可以查看数据库。数据库名为 app_uoj233

数据库结构如下:

db066bd1bab5f06d3caac1c1aa38a42d.png

其中 problems_contents保存了题面,problems中的 title保存了题目标题。

problems_contents 表结构中有 statementstatement_md,分别是使用 HTML 风格和 Markdown 风格保存的题面。

数据在 uoj/problem 下。需要一些 svn 操作与测评机同步。

(然鹅试了并没有成功……

3、SYZOJ

SYZOJ 是一个比较不错的 OJ 解决方案,从页面设计到测评方式都是比较完美的。包括支持各种类型的题目测评,更加开放的管理模式,作为校内 OJ 或者开放式的 OJ 都是很好的选择。

这里 @billchenchina 写过安装方法就不造轮子了。不过最初安装后注册必须需要邮箱获取验证链接,可以修改 config.jsonregister_email项为 false,就不用验证邮箱了。

不过找回密码可能有点麻烦。

第一个登录的用户并不是超级管理员,需要手动设置。

SYZOJ 的数据库可选 MySQL 和 SQLite3,默认是 SQLite3。数据库名为 syzoj.db

数据库结构如下:

c1eea4e7ff5cb0a59026d0a5b1424a88.png

题面存在 problem 表中,均用 Markdown 存储。但是如同 HUSTOJ,并不是整个题面放在一起,而是分为题目描述,输入输出格式等等。

数据存在 upload/testdata 中,上传的附加文件在 upload/additional_file中。

4、Vijos

Vijos 作为很久之前很火的 OJ,目前网页端已更新至 vj4.0,Judger 为 jd4.0,需要两部分的安装。vj4.0 的「域」功能作为亮点也赢得了一定的部署量,还有在线 IDE 和比较美观的 UI 也受到不少用户的欢迎。jd4 的沙盒也有不错的防卡评测的功能,虽然都是 Python3.5 写的,在运行效率上满足小规模测评需要也是没有问题的。

感觉有很多情怀用户的……不过 vj1.0 和 2.0 都不是开源项目没法研究,敝校有一台 vj1.0 的服务器或许还可以继续研究一下。

但是,你得先安装一堆依赖……

Python3.5 很好安装,直接过去。但是还需要安装 pip,顺便也装上。

然后安装糟心的 MongoDB,安装过程参照这里。

相信大家英文水平够好就不介绍了……

注意启动 MongoDB 服务!sudo service mongod start

然后把 vj4 的仓库 clone 下来。放在 /home 下。

进入 vj4 的仓库,命令行 pip3 install -r requirements.txt安装依赖。

安装后进入更糟心的 Node.js 安装,在这里。可能有奇奇怪怪的错误和漫长的等待。

最后 node -v 一下,看看如果是 v8.9.0 及以上的就应该是成功了。

然后是 RabbitMQ,但是先要安装 erlang,然后直接 sudo apt install rabbitmq-server即可。

注意启动服务! sudo rabbitmq-server start

然后设置一下国内的 npm 源之后安 Node.js 的依赖即可。在 vj4 文件夹下npm install 即可。

然后终于可以编译 UI 了……

sudo npm run build 后没有错误信息说明编译成功,否则可以在这里找到编译好的 UI 文件,解压到 vj4/vj4/即可。

最后,启动服务,在 vj4 目录下 python3 -m vj4.server --debug,如果没有错误信息,则大功告成。

(我安了一晚上)

第一个登录的用户为超级管理员。

需要注意 vj4 服务运行于终端中,也就是说运行 vj4 的终端窗口不能关闭。而且不能使用 putty、webshell 等方式运行。

还需要安装测评服务 jd4,不说了(因为我没安……)。

jd4 也是跑在 docker 上的。

Vijos 的数据库放在了 MongoDB 上,采用 NoSQL。其实不太习惯 NoSQL 的,直接可视化,用 adminMongo 就可以了。

注意先启动 MongoDB 服务!

adminMongo 的安装和启动在 github 上介绍十分详细了,我不赘述了。

直接 0.0.0.0:1234 后,填写如下信息:

833d64e48785787952e7eaf3bae1ac65.png

然后先 Add 一下,最后 Connect 上去。

于是就这样了:

353d98934bbcddde319f8ffc0547e31f.png

其中,document中储存的是题面,样例如下:

e4d373b83124de81c8f4a637516d02f8.png

可以看出 content是用 Markdown 格式存储的,唯一有点问题的是不知道 doc_type是干啥的……

数据存在 fs.chunks 里,因为 vj4 用的 MongoDB 自带的 gridfs 抽象,于是就这样了。

其他表留给大家自行探索(逃。

以上是一些 OJ 的安装(与卸载),如果有其他 OJ 安装的需要请自行解决(光速逃)。

不过个人认为这四个 OJ 已经可以覆盖大部分需要了。

真是出来混迟早要还,去自招老师问「你用什么数据库」,当时我随口 MySQL 其实没怎么用过,结果就这么还了……(捂脸

下面是对于 OJ.Harmonics 的一些介绍咯……

5、OJ.Harmonics

OJ.Harmonics 是一个方便转移和备份 OJ 的工具,通过创建「标准题目文件夹」进行题目转移和备份操作(不过并不能完成对用户数据和比赛信息的备份,不过题目导入之后可以重建)。所有代码均用 Python 编写。

Harmonics 是 Kanade 创建分身的技能)

(哦应该是 Guardskill::Harmonics()

「标准题目文件夹」是一个文件夹,包含以下内容:

1、data 文件夹,包含所有数据和 Special Judge 程序或源代码;

2、pic_and_other 文件夹,包含题面内的图片,附件等内容;

3、title.txt,包含题目标题;

4、description.txt,包含题目描述;

5、input.txt/output.txt,包含题目的输入输出格式;

6、sample_input.txt/sample_output.txt,包含题目的样例输入输出;

7、spj.txt ,包含是否含有 Special Judge,0表示没有,1表示有;

8、hint_and_source.txt,包含对题目的提示和来源;

9、limitation.txt,包含题目的时间和空间限制,第一行为时间限制,以秒为单位,第二行为空间限制,以兆为单位。

实现方式是直接对数据库操作,读取题目数据库来完成对题目的导入导出。

但是有一些 OJ 导入导出有格式问题,可能需要用 h2m 等转换工具进行转换。

项目在这里,使用方法见这里。目前(2018-7-18)只有一个导出 HUSTOJ 的程序。

UPD:已经 archived 了……

这是本人写的第一个(不是易语言或 VB 的)项目,欢迎 issue 欢迎 pr 欢迎吐槽。日后将持续更新。

如果感觉不错请给个 star 十分感谢。(感觉脸有点疼……

把在学校成人礼上立的 flag 搞定了。虽然完成度极低……

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值