ошибки require () во время записи целевого файла

Я использую vi для редактирования живого файла на сервере. Это основной файл, необходимый практически для каждой страницы на умеренно загруженном веб-сайте. Все работает нормально, пока я редактирую, но когда я сохраняю свои изменения примерно половину времени, журналы показывают, что у пользователя произошла ошибка «Не удалось открыть файл common.php».

Я могу только предположить, что запрос страницы поступил во время записи файла, и vi поддерживает эксклюзивную блокировку файла во время записи, а PHP просто немедленно сдается вместо очереди для снятия блокировки. Не могу найти ни одного обсуждения по этому вопросу. Кто-нибудь знает? Есть ли способ исправить эту ситуацию? Я предполагаю, что выполнение этого «правильного» способа путем локального редактирования, отправки в репозиторий и последующего обновления изменений на производственном сайте будет иметь ту же проблему, поскольку svn, кажется, требует больше времени для запуска, чем vi для записи.

0

Решение

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

Но простой трюк для атомарного обновления файла — переименовать новую версию поверх цели. Процедура:

cd temporary-working-dir
cp your/web/stuff/common.php common.php
vi common.php  # make your changes
mv common.php your/web/stuff/common.php

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]