Не удается загрузить медиафайлы в производстве Django во внешнюю папку

У меня проблема с рабочим сервером Django. Когда я пытаюсь загрузить изображения, они всегда попадают в папку app/media/. Однако я хочу, чтобы они загружались в /mnt/data. В панели администратора, когда я загружаю изображение, оно всегда загружается в папку app/media/. Я попытался настроить файл конфигурации Nginx и файл settings.py, но, похоже, я потерялся.

Вот моя конфигурация Nginx:

     location /static/ {
            root /home/somthing/something/;
        }
        location /media/ {
        root /mnt/data/;
        }

и Настройки.py:

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

    # Media files

    MEDIA_URL = '/media/'

    MEDIA_ROOT = (
        os.path.join(BASE_DIR, 'media')
    )

и в моей модели я создаю изображение так:

    pictures = models.ImageField(
            upload_to='postings/',
            verbose_name=_('Posting_picture'),
            blank=True, null=True,
            validators=[validate_image],
        )

Я предполагаю, что после этой конфигурации загруженное изображение должно быть в mnt/data/media/postings.

Медиа-папка на mnt/data/ - это chmod 777, я сделал это, когда потерял надежду писать/читать папку.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
616
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В настоящее время вы загружаете на:

MEDIA_ROOT = (
    os.path.join(BASE_DIR, 'media')
)

В основном означает:

/path/to/project/media

В вашем случае это должно быть:

MEDIA_ROOT = '/mnt/data'

Спасибо, у вас есть какие-нибудь идеи о правах доступа к папке? Я хочу держаться подальше от разрешения 777.

Riad C 28.05.2019 22:18

760 подойдет для nginx. Nginx нужен только доступ для чтения. Так что 760 достаточно

Debendra 28.05.2019 22:20

извините еще раз, но теперь у меня другая проблема: файлы загружаются в mnt/data/postings, но читаются из mnt/data/media/postings.

Riad C 29.05.2019 01:48

Извини, я не смог тебя достать.

Debendra 29.05.2019 04:38

Я, наконец, понял, Debendera был правильным для пути, но конфигурация Nginx была неправильной. Я изменил его на:

location /media/ {
    alias /mnt/data/;
    }

и тогда это сработало. Если не ошибаюсь, лучше было использовать псевдоним вместо root. Это мой референс: Nginx — статический файл, вызывающий путаницу с корнем и псевдонимом

Другие вопросы по теме