diff --git a/Dockerfile b/Dockerfile index f10b84c..2e10830 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,7 @@ FROM python:2.7 -ENV PYTHONUNBUFFERED 1 -ENV oj_env daocloud -RUN mkdir /var/oj -COPY . /var/oj/ -WORKDIR /var/oj/ +ENV PYTHONBUFFERED 1 +RUN mkdir -p /code/log /code/test_case +WORKDIR /code +ADD requirements.txt /code/ RUN pip install -r requirements.txt -EXPOSE 8080 -RUN mkdir LOG -RUN mkdir test_case -RUN mkdir tmp -RUN python manage.py migrate -CMD python manage.py runserver 0.0.0.0:8080 +EXPOSE 8010 \ No newline at end of file diff --git a/judge/Dockerfile b/judge/Dockerfile new file mode 100644 index 0000000..c2ca1b1 --- /dev/null +++ b/judge/Dockerfile @@ -0,0 +1,19 @@ +FROM ubuntu:14.04 +MAINTAINER virusdefender +RUN mkdir /var/install/ +WORKDIR /var/install/ +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get update +RUN apt-get -y install software-properties-common python-software-properties +RUN add-apt-repository -y ppa:webupd8team/java +RUN apt-get update +RUN apt-get -y install python gcc g++ rake pkg-config git make autoconf automake libtool python-pip python2.7-mysqldb +RUN echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections +RUN echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections +RUN apt-get install -y oracle-java7-installer +RUN apt-get -y install libseccomp-dev +RUN git clone https://github.com/quark-zju/lrun.git +RUN cd lrun && make install +RUN mkdir -p /var/judger/run/ && mkdir /var/judger/test_case/ && mkdir /var/judger/code/ +RUN chmod -R 777 /var/judger/run/ +WORKDIR /var/judger/code/ \ No newline at end of file diff --git a/judge/judger_controller/settings.py b/judge/judger_controller/settings.py index a0d3e66..aff08b1 100644 --- a/judge/judger_controller/settings.py +++ b/judge/judger_controller/settings.py @@ -1,4 +1,5 @@ # coding=utf-8 +# 这个redis 是 celery 使用的,包括存储队列信息还有部分统计信息 redis_config = { "host": "121.42.32.129", "port": 6379, @@ -6,17 +7,21 @@ redis_config = { } +# 判题的 docker 容器的配置参数 docker_config = { - "image_name": " a7673b55d263", + "image_name": "3da0e526934e", "docker_path": "docker", "shell": True } -test_case_dir = "/root/test_case/" -source_code_dir = "/root/" +# 测试用例的路径,是主机上的实际路径 +test_case_dir = "/var/mnt/source/test_case/" +# 源代码路径,也就是 manage.py 所在的实际路径 +source_code_dir = "/var/mnt/source/OnlineJudge/" +# 存储提交信息的数据库,是 celery 使用的,与 oj.settings/local_settings 等区分,那是 web 服务器访问的地址 submission_db = { "host": "127.0.0.1", "port": 3306, diff --git a/oj/daocloud_settings.py b/oj/daocloud_settings.py deleted file mode 100644 index a99e009..0000000 --- a/oj/daocloud_settings.py +++ /dev/null @@ -1,19 +0,0 @@ -# coding=utf-8 -import os - -LOG_PATH = "LOG/" - -# Database -# https://docs.djangoproject.com/en/1.8/ref/settings/#databases -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), - 'CONN_MAX_AGE': 1, - } -} - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True \ No newline at end of file diff --git a/oj/local_settings.py b/oj/local_settings.py index 0b7f642..b923291 100644 --- a/oj/local_settings.py +++ b/oj/local_settings.py @@ -12,15 +12,16 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), - 'CONN_MAX_AGE': 0.3, }, + # submission 的 name 和 engine 请勿修改,其他代码会用到 'submission': { 'NAME': 'oj_submission', 'ENGINE': 'django.db.backends.mysql', 'HOST': "121.42.32.129", 'PORT': 3306, 'USER': 'root', - 'PASSWORD': 'mypwd' + 'PASSWORD': 'mypwd', + 'CONN_MAX_AGE': 0.1, } } @@ -30,4 +31,3 @@ DEBUG = True TEST_CASE_DIR = os.path.join(BASE_DIR, 'test_case/') ALLOWED_HOSTS = [] - diff --git a/oj/server_settings.py b/oj/server_settings.py index badfef6..185bf6b 100644 --- a/oj/server_settings.py +++ b/oj/server_settings.py @@ -12,7 +12,7 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': "oj", - 'CONN_MAX_AGE': 0.3, + 'CONN_MAX_AGE': 0.1, 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', @@ -21,6 +21,7 @@ DATABASES = { 'submission': { 'NAME': 'oj_submission', 'ENGINE': 'django.db.backends.mysql', + 'CONN_MAX_AGE': 0.1, 'HOST': "127.0.0.1", 'PORT': 3306, 'USER': 'root', @@ -34,4 +35,3 @@ DEBUG = True TEST_CASE_DIR = '/root/test_case/' ALLOWED_HOSTS = ['*'] - diff --git a/oj/settings.py b/oj/settings.py index 376060f..097a4c2 100644 --- a/oj/settings.py +++ b/oj/settings.py @@ -113,10 +113,6 @@ STATIC_URL = '/static/' STATICFILES_DIRS = (os.path.join(BASE_DIR, "static/src/"),) -TEMPLATE_DIRS = ( - os.path.join(BASE_DIR, "template/src"), -) - AUTH_USER_MODEL = 'account.User' LOGGING = { diff --git a/problem/serizalizers.py b/problem/serizalizers.py index 1fb61cc..f9c5caa 100644 --- a/problem/serizalizers.py +++ b/problem/serizalizers.py @@ -26,8 +26,8 @@ class CreateProblemSerializer(serializers.Serializer): samples = ProblemSampleSerializer() test_case_id = serializers.CharField(max_length=40) source = serializers.CharField(max_length=30, required=False, default=None) - time_limit = serializers.IntegerField() - memory_limit = serializers.IntegerField() + time_limit = serializers.IntegerField(min_value=1) + memory_limit = serializers.IntegerField(min_value=1) difficulty = serializers.IntegerField() tags = serializers.ListField(child=serializers.CharField(max_length=10)) hint = serializers.CharField(max_length=3000, allow_blank=True) @@ -61,8 +61,8 @@ class EditProblemSerializer(serializers.Serializer): output_description = serializers.CharField(max_length=10000) test_case_id = serializers.CharField(max_length=40) source = serializers.CharField(max_length=30) - time_limit = serializers.IntegerField() - memory_limit = serializers.IntegerField() + time_limit = serializers.IntegerField(min_value=1) + memory_limit = serializers.IntegerField(min_value=1) difficulty = serializers.IntegerField() tags = serializers.ListField(child=serializers.CharField(max_length=20)) samples = ProblemSampleSerializer() diff --git a/requirements.txt b/requirements.txt index 9ad8f3f..3a706b4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,5 @@ django-rest-swagger celery gunicorn coverage -django-extensions \ No newline at end of file +django-extensions +supervisor \ No newline at end of file diff --git a/static/src/js/app/admin/problem/addProblem.js b/static/src/js/app/admin/problem/addProblem.js index d34cd9a..c6e49ca 100644 --- a/static/src/js/app/admin/problem/addProblem.js +++ b/static/src/js/app/admin/problem/addProblem.js @@ -13,10 +13,6 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE bsAlert("题目描述不能为空!"); return false; } - if (vm.timeLimit < 1000 || vm.timeLimit > 5000) { - bsAlert("保证时间限制是一个1000-5000的合法整数"); - return false; - } if (vm.samples.length == 0) { bsAlert("请至少添加一组样例!"); return false; diff --git a/static/src/js/app/oj/problem/problem.js b/static/src/js/app/oj/problem/problem.js index d936e0f..1faeb6d 100644 --- a/static/src/js/app/oj/problem/problem.js +++ b/static/src/js/app/oj/problem/problem.js @@ -48,7 +48,7 @@ require(["jquery", "codeMirror", "csrfToken", "bsAlert"], function ($, codeMirro if (!data.result) { html += "CPU time: " + data.accepted_answer_time + "ms   "; } - html += ('查看详情 '); + html += ('查看详情 '); return html; } diff --git a/template/src/oj/problem/problem.html b/template/src/oj/problem/problem.html index 2efd86a..b82fc01 100644 --- a/template/src/oj/problem/problem.html +++ b/template/src/oj/problem/problem.html @@ -23,7 +23,7 @@
-

{{ problem.output_description }}k

+

{{ problem.output_description }}

{% for item in samples %}
diff --git a/template/src/oj_base.html b/template/src/oj_base.html index f39fea0..ba001e1 100644 --- a/template/src/oj_base.html +++ b/template/src/oj_base.html @@ -56,7 +56,7 @@ {{ request.user.username }}