Почему Django не может создавать каталоги и открывать файлы на рабочем сервере? - PullRequest
0 голосов
/ 15 января 2011

Поднимая сайт Django на производственном сервере Linux с использованием Apache с mod_python, я запускаю следующий код для загрузки файла:

from django.conf import settings
import os

# ...

upload_base_dir = "upload"
file_pointer = files['file']
file_path = os.path.join(settings.ROOT_SITE_DIR, upload_base_dir, event_name)
if not os.path.exists(file_path):
    os.makedirs(file_path)
file = open(file_path + '/' + file_name, 'wb+')
for chunk in file_pointer.chunks():
    file.write(chunk)
file.close()

file_path - это абсолютный путь к файлу. Я сделал небольшую отладку, чтобы найти, что если file_path не существует, os.makedirs () завершается ошибкой (ошибка 500 возвращается запрашивающей стороне). Если путь_файла существует, открыть файл не удастся. Я убедился, что права доступа к каталогу достаточно разрешительны.

Код работает, когда я запускаю сервер разработки Django. Я использовал этот код раньше, и он работает на других сайтах. Я почти уверен, что конфигурация Apache одинакова для соответствующих настроек.

Должно быть простое решение, так что это сводит меня с ума. У кого-нибудь есть указатели на другие вещи, которые я должен проверить? Могу ли я исключить Apache как часть проблемы?

Ответы [ 2 ]

0 голосов
/ 15 января 2011

Похоже, что потоки Apache не имели доступа к файлам, потому что они были созданы пользователем (www-data), который не был частью группы, которой принадлежат каталоги.Надеюсь, это поможет кому-то еще сэкономить время в будущем.

0 голосов
/ 15 января 2011

Всегда ли os.path.join оставляет косую черту в file_path? Потому что если нет, то ваш open (file_path + file_name) не будет между ними. Попробуйте os.path.join на них.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...