Улучшенная поддержка серверов компиляции
Навигация: Главная страница/Система ejudge/Использование/Улучшенная поддержка серверов компиляции
В версии 3.13.0 поддерживается улучшенный механизм взаимодействия сервера турнира ej-contests и серверов компиляции e-compile.
Главным недостатком "старой" модели поддержки языков программирования было то, что конфигурации языков программирования в турнире были несинхронизированы с конфигурацией языков программирования в используемом сервере компиляции ej-compile.
- При обновлении версий языков программирования информация о версиях не обновляется в конфигурационных файлах турниров.
- Конфигурации языков программирования нужно копировать в каждый турнир.
- При переключении на другой сервер компиляции информация о языках программирования не синхронизируется.
Новый механизм взаимодействия сервера турнира и сервера компиляции доступен, если при конфигурировании ejudge
с помощью configure
была указана опция --enable-compile-spool-dir
,
доступная с версии 3.8.0. Новый механизм не включается автоматически,
он должен быть активирован вручную для каждого турнира. Для его активации нужно
на странице списка турниров в serve-control перейти к редактированию настроек (Settings),
перейти на вкладку Language Settings и в строке "Compilation server integration DISABLED" нажать кнопку "Enable".
Затем потребуется выполнить операцию "COMMIT changes!", и после этого снова открыть экран настроек
языков программирования при редактировании турнира. Новый экран настроек языков
программирования сильно отличается от старого. Изменение сервера компиляции по умолчанию в турнире
тоже потребует сохранения настроек турнира с помощью "COMMIT changes!".
Новая страница редактирования настроек языков программирования позволяет выбирать сервер компиляции для турнира, если доступно несколько серверов компиляции. Каждый язык программирования может активироваться и деактивироваться.
Настройка доступных языков программирования в турнире
Новый механизм взаимодействия сервера турнира с сервером компиляции включается, если
установлен в положительное значение глобальный конфигурационный параметр
enable_language_import
, например так:
enable_language_import
Если в качестве основного сервера компиляции используется не сервер по умолчанию, его имя
указывается в глобальном конфигурационном параметре
compile_server_id
, например так:
compile_server_id = "fast"
Сервер компиляции ej-compile при старте сохраняет актуальную конфигурацию поддерживаемых
языков в каталог, задаваемый опцией --enable-compile-spool-dir
. Таким образом
актуальная конфигурация становится доступной серверу турниров ej-contests. Сервер турниров
загружает актуальную конфигурацию языков программирования из файла и объединяет с локальными
конфигурационными секциями языков программирования. Локальные конфигурационные секции
могут модифицировать конфигурацию языков от сервера компиляции.
Список разрешенных языков программирования для турнира можно задать с помощью
глобального конфигурационного параметра
language_import
.
Например, конфигурация
enable_language_import language_import = "enable all"
включает все языки программирования, поддерживаемые сервером компиляции, кроме языков,
явно помеченных default_disabled
.
В текущей версии к ним относятся языки postgres и custom.
Выборочно запретить некоторые языки программирования можно следующим образом:
enable_language_import language_import = "enable all" language_import = "disable python,vbnc"
Возможна конфигурация языков с разрешением избранных языков и запретом всех остальных:
enable_language_import language_import = "disable all" language_import = "enable g++,clang++"
Кроме того, можно изменить конфигурацию языка программирования с помощью явной секции:
enable_language_import language_import = "disable all"
[language] short_name = "g++" compiler_env = "EJUDGE_FLAGS=-O2 -Wall -std=gnu++23"
У секции модификации конфигурации языка должен быть задан параметр
short_name
и не должен быть задан параметр
id
.
Если для языка заданы дополнительные настройки с помощью секции [language]
,
такой язык активируется по умолчанию. Его можно не указывать в language_import
.