Вопрос:
У меня есть регистрация в моем проекте Django. Он работает локально в разработке, но это создает проблемы в производстве. settings.py следующие:
import os PROJECT_PATH = os.path.abspath(os.path.dirname(__name__)) . . . ‘handlers’: { ‘log_file’: { ‘level’: ‘INFO’, ‘class’: ‘logging.handlers.RotatingFileHandler’, ‘filename’: os.path.join(PROJECT_PATH, ‘logs/django.log’), ‘maxBytes’: ‘16777216’, ‘formatter’: ‘verbose’ }, . . .
Я продолжаю получать эту ошибку в /var/log/apache2/error.log:
ValueError: Unable to configure handler ‘log_file’: [Errno 2] No such file or directory: ‘/logs/django.log’
Я протестировал это в оболочке Django, выполнив код и установив PROJECT_PATH вручную, и, похоже, вернул правильный путь. Кроме того, я проверил и проверил разрешения на файл журнала. Хотя это и не нужно, я изменил его на 777 чтобы проверить. Еще не повезло.
Мой локальный журнал заполняет все, что я ожидаю, пока журнал производства пуст.
Подумав об этом, я полагаю, что это местоположение журнала, вероятно, не самое лучшее, но если бы оно работало на производстве, по крайней мере, я бы знал… Тогда я мог бы работать над изменением местоположения.
Что мне не хватает?
Лучший ответ:
Хотя я действительно хотел бы получить ответ на этот вопрос, я решил сделать другой подход, чтобы я мог двигаться дальше. Кажется, этот вопрос не вызывает достаточного внимания, и сейчас я не чувствую себя щедростью, поэтому сейчас я отключил ведение журнала в файл. Я все равно перепроектирую свой подход, так что это похоже на приличную идею.
То, что я придумал временно, которое, похоже, работает и не дает ошибок, – это (для определения обработчика файла):
‘file’: { ‘level’: ‘DEBUG’, ‘class’: ‘logging.FileHandler’, ‘filename’: ‘/some/fixed/path/to/logs/django.log’, },
Обратите внимание, что до того, как я использовал значение, полученное из os.path.join(PROJECT_PATH, ‘logs/django.log’). Не знаю, почему это не сработало, но это был преступник. Таким образом, хотя этот бит был прав: PROJECT_PATH = os.path.abspath(os.path.dirname(__name__)) (даже подтвержденный в оболочке python), он не работал в производстве.