OJ运维的一些问题解决

前言

最近在维护NYOJ2.0的一些BUG,由于判题机采用的是HUSTOJ的判题机,所以就必须了解一下HUSTOJ的源码。

HUSTOJ的源码开源GitHub,我们可以clone下来自己部署一个。地址是:hustoj

首先是几个个重要的配置文件的位置:

/home/judge/etc/judge.conf  #判题端配置文件
/home/judge/src/web/include/db_info.inc.php #数据库及web端的一些配置
/etc/php5/fpm/php.ini 或 /etc/php7.0/fpm/php.ini #php的配置
/etc/nginx/sites-enabled/default  #nginx的配置文件

对于很多的对于判题机以及oj的配置,都需要修改以上的配置文件.

HUSTOJ设置允许提交的语言

这个在配置文件/home/judge/src/web/include/db_info.inc.php中修改,里面的第23行,static $OJ_LANGMASK=,这个值代表了允许哪些语言。可以从下面获得
(nyoj2.0在这里/var/www/OJ/trunk/src/nyoj-v2/app/config.php)

我们在源码中定位一下,/home/judge/src/core/judge_client/judge_client.cc这个文件,在130行可以找到对于语言的定义:

static char lang_ext[18][8] = { "c", "cc", "pas", "java", "rb", "sh", "py",
                "php", "pl", "cs", "m", "bas", "scm","c","cc","lua","js","go" };

按照顺序编号从0到17,

语言 c cpp pas java rb bash py php perl c# oc fb sc cl cl++ lua js go
代码 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072
0启用1禁用 0 0 0 0 1 1 0 0 1 1 1 0 1 0 0 1 0 1 langmask:
0 0 0 0 16 32 0 0 256 512 1024 0 4096 0 0 32768 0 131072 169776

按照二进制位,0代表启用,1代表禁用,最后会有一个01串,然后把这个01串翻转一下,转化成十进制就是我们要求的值.比如我们只允许C,C++,JAVA,PYTHON提交,那么最后的01串是111111111110110100,十进制的值是:262068.

HUSTOJ设置提交页面的语言显示,比如Python显示为Python3

找到这个文件:/home/judge/src/web/include/const.inc.php

修改对应的语言显示即可.

判题机出现RE问题

参考知乎专栏:https://zhuanlan.zhihu.com/p/24498599

给oj添加MathJax支持

在对应的页面添加以下js
HUSTOJ地址:/home/judge/src/web/template/bs3/js.php
nyoj2.0地址: /var/www/OJ/trunk/src/nyoj-v2/app/web/view/pc/problem/problem.html
/var/www/OJ/trunk/src/nyoj-v2/app/web/view/pc/contest/problem.html

<script type="text/javascript"
  src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

由于js原因导致无法交题。

仅对于nyoj2.0
修改trunk/src/nyoj-v2/app/web/view/pc/problem/getsubmitpage.html

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注