封榜
在计划时间,关闭management里的contest管理的Real Time Rank和Status,实现封榜。
滚榜
项目开源
(本项目无后端,只有前端~)
1. 得到比赛提交数据
- 首先进入oj-postgres容器(数据库)
docker exec -it 容器名 sh
- 登录onlinejudge账户
(在yml文件中查找数据库对应的账户密码(这个可以类比于进入电脑的账号密码),以及容器的数据库的名称(这个可以类比于电脑里的cde盘))
psql -U onlinejudge
- 进入onlinejudge数据库(
database[简写DB]
)
psql学习资料
psql -U onlinejudge
psql语法拓展(菜鸟教程)
- \l // 列出所有数据库
- \c 数据库名 // 进入数据库
- \d // 列出数据库所有表名
- \q // 同时退出账户和数据库回到容器根目录
- \d 表名 // 列出表中的所有字段
字段的概念:字段其实就是数据库中表的列。
批处理:就是项目部署的一套操作
- 将本次比赛的提交记录搞出来
copy (select * from submission where contest_id='本次比赛的后台id') to '/home/1.csv' with csv header
// 将onlinejudge数据库中的submission表中的所有contest_id字段为本次比赛的后台id的行,保存到1.csv文件中并复制到oj-postgres容器的home目录下。
- 将1.csv从docker容器的home目录复制到云服务器上
参考资料
docker cp 容器名:(注意这里不能有空格)/home/1.csv(这里指明具体复制文件) /home(服务器目录下)
// 若复制报错解决措施
- chmod 777 /home // 给oj-postgres容器的这个目录777权限(可写权限),在容器根目录执行
- 通过xtfp将1.csv搞到本地物理机上
- 对1.csv进行筛表
根据开源项目中的 a,b cpp文件筛出需要的字段,其余删掉,最后删掉首行。若cpp汉字出现乱码,在记事本里打开即可。
特别注意: a表中的时间字段需要将空格全部删除,因为a.cpp读入时没用gets。
excel全选中,查找替换中,将空格全替换
- 将a.cpp,b.cpp,更改cpp中的路径为对应筛表的路径,运行cpp。将结果保存到两个记事本里,并将其改为json文件。替换掉原来的data文件夹中的所有文件。
特别注意: json文件的命名需与源文件相同(12th…),否则需要修改js文件夹中的scrollboard.js文件实现自定义。 - 修改index中的title,以及github上提到的时间(时间写data文件夹中的那个包含时间的文件的最小值12点,封榜时间往后推即可),奖牌等。
- 将img文件夹拉入,并将index下图处加上这句话为网页加上logo。这里的名字必须与文件夹中的文件夹名,文件名一致。
- 修改js文件中的scrollboard.js文件的下图位置为你的data文件夹中的含题号的那个文件中的最小题号。
- 将以下文件打包到一个文件夹,上传到云服务器
2. 利用nginx部署网页前端实现访问(nginx反向代理)
实现
网页的访问主要依赖于index.html,以及其中提到的依赖路径和文件。
通过访问nginx所处服务器公网ip + nginx服务器然间占用的端口,访问nginx反向代理服务器内搭建的网站。
注意: 阿里云服务器root用户无法远程连接。。
更完善的ACM赛事滚榜开源项目
仔细研读ing…