Чтобы избежать конфликтов при записи во время обновления, используется простой механизм блокировки.

реализовано так, что другой вики-процесс, желающий обновить ту же страницу, будет ждать

на некоторое время (и в конечном итоге прервать), если блокировка указывает, что страница «занята». Во время этого

интервал, между блокировкой и разблокировкой, файл подкачки физически обновляется вместе с любым

связанное резервное копирование или контроль версий, например, выполняемый с помощью отслеживания версий

(RCS) компонентов.

В идеале все процессы, которые каким-либо образом изменяют файлы страниц или файлы журналов, должны проходить

с помощью той же процедуры блокировки и разблокировки. Насколько это критично, зависит очень

многое зависит от контекста, в котором находится вики, и от того, насколько часты обновления. в

реализованная версия, и блокировка, и разблокировка закодированы как отдельные подпрограммы,

что упрощает это использование.


РАЗБОР ЗАПРОСОВ

259

Дополнительные возможности

Здесь вы найдете некоторые подпрограммы, которые, хотя и не являются строго необходимыми, все же могут быть

включены в базовый скрипт для удобства.

Начальная загрузка

Код начальной загрузки является дополнительной мерой предосторожности, поскольку он позволяет переименовывать сценарий.

создать новый экземпляр вики, не беспокоясь о ручном создании необходимого

подкаталоги.

суббутстрап {

если (-d $DataBase) {возврат; }

# -v- создать каталог с соответствующими разрешениями

(mkdir $DataBase, 0755)

|| &AbortScript("Невозможно создать каталог $DataBase: $!");

# вставляем дальнейшие операторы if по мере необходимости

}

Из-за того, что подкаталог страницы для вики назван в честь файла сценария

собственное имя, эту функцию очень легко реализовать. Обратите внимание на конкатенацию ИЛИ с

соответствующую обработку ошибок.

Здесь могут быть включены дополнительные отказоустойчивые испытания и корректирующие меры. С использованием

контроль версий, такой как RCS, например, требует подкаталог базы данных

один, под названием «RCS». Его создание должно происходить в этом контексте.

Привязка дампа

Эта подпрограмма для вывода внутренних форматов информации и вывода отладочной информации.

информация. Активируется путем раскомментирования последних строк в

ProcessRequest, описанный ранее.

sub DumpBinding {

местный (* словарь) =

print "<hr><dl>\n";

for (keys(%dict)) { print "<dt>$_<dd>$dict{$_} \n"; }

напечатать M</dlxhr>\n";

}

Ничего сложного в этом ритуале нет. В обычной манере Perl мы создаем

словарь ключей и значений на основе переменных среды или других


260

АЛЬТЕРНАТИВЫ И РАСШИРЕНИЯ

параметры, указанные в вызове, и перечислите их клиенту. В QuickiWiki более короткая карта

изменение команды сделало то же самое.

Это полезно как при отладке, так и при определении того, какая среда

переменные присутствуют в данной ситуации сервера.

ОСОБЫЕ ВОЗМОЖНОСТИ

Независимо от выбранной модели Wiki, вызываемой модулем или синтаксического анализа запроса, помимо базовой

функциональность — это множество возможных расширений, которые могут быть созданы как отдельные

модули или интегрированы в код.

Хотя, несомненно, ценный в определенных контекстах, по мнению авторов, наиболее

из этих расширений не являются неотъемлемой частью основной концепции Wiki. Некоторые также могут представить

штрафы за юзабилити или риски безопасности во многом так же, как и разрешение пользователям

и отредактируйте необработанный исходный HTML.