У меня есть небольшое CGI-приложение на основе Perl, которое я запускаю в веб-пространстве проекта, предусмотренном для проекта SourceForge. Это приложение хранит данные в файле базы данных SQLite (v. 3).
Когда я запускаю тестовые сценарии из оболочки, я могу читать и писать в этот файл SQLite. Однако, когда код CGI выполняется Apache, он имеет доступ только для чтения. Операции записи приводят к ошибке файла журнала:
error.log.web-2:[Wed Oct 27 14:40:22 2010] [error] [client 127.0.0.1] DBD::SQLite::db do failed: unable to open database file
В целях тестирования я проверил разрешения для этого файла SQLite вплоть до 777. Без разницы.
Тем не менее, есть несколько забавных предостережений в веб-пространстве проекта SourceForge, и мне интересно, не запутался ли я. Как правило, основная файловая система веб-сервера доступна только для чтения Apache. Если у вас есть файлы, которые должны быть доступны для записи во время выполнения, вы должны хранить их в специальном «постоянном» каталоге в другом месте ... и создавать символические ссылки из вашего веб-пространства на фактические файлы в этом каталоге.
Я сделал это, и разрешения установлены на 777 как для символической ссылки , так и фактического файла SQLite в расположении "постоянства". Я знаю, что этот механизм работает в целом, потому что я делаю то же самое с файлами кэша и журналов, и он работает там.
Мне интересно, есть ли что-нибудь забавное в самом SQLite, не желая открывать символическую ссылку (а не необработанный файл) для записи.