@Skycker
Python/Django developer

После git push затираются media файлы на сервере. Как исправить?

Доброго времени суток всем!

Завел учетную запись на PaaS сервисе OpenShift, слил оттуда через git clone скелет сайта. Далее разрабатывал и заливал на сервер изменения, но почему-то игнорировал одну проблему, которая сейчас, уже перед релизом, тормозит всю работу.

Как и положено, медиа файлы отделены от статических и находятся по адресу wsgi/media/web_site. Допустим, из панели администратора были загружены несколько файлов, например, фотографий, которые будут отображаться на страницах сайта. Все они корректно положатся в папку wsgi/media/web_site на сервере и будут оттуда браться при рендеринге страниц. Но этих фотографий естественно нет в одноименной папке на локальной машине и через git pull они не сливаются. Пишет, Everything is up-to-date.

Если я внесу изменения в код, закомичу и сделаю git push, то все загруженные из панели администратора фотографии будет удалены, в папку wsgi/media/web_site будут загружены файлы с локальной машины. Добавление строки wsgi/media в файл .gitignore и удаление из индекса гита git rm wsgi/media --cached пользы не принесло, новые картинки с локальной машины не отправляются на сервер, но папка media на сервере просто удаляется.

Как сделать так, чтобы при push изменений в коде загруженные медиа файлы на сервере не трогались? или хотя бы сливать их на локальную машину через git pull?

Разработки на Django 1.6 и Python3
  • Вопрос задан
  • 2916 просмотров
Решения вопроса 1
@Skycker Автор вопроса
Python/Django developer
Дело было не в .gitignore и не в git вообще. Проблема была в непонимании механизма деплоя приложений на OpenShift. Каждый раз, когда исполняется команда git push сервис подчищает папку с репозиторием и разворачивает все заново. Как я понял, для Heroku, это тоже справедливо. Но есть папка app-root/data, которая не удаляется при деплое, туда и нужно складывать медиа файлы, которые грузятся через админку или пользователями приложения.
Чтобы избежать потери файлов поправил settings.py таким образом:
# Media files
if ON_OPENSHIFT:
    MEDIA_ROOT = os.path.join(os.environ['OPENSHIFT_DATA_DIR'], 'media')
    MEDIA_URL = '/media/'
else:
    MEDIA_ROOT = os.path.join(BASE_DIR, '..', 'media')
    MEDIA_URL = '/media/'

Путь до app-root/data как раз содержится в системной переменной OPENSHIFT_DATA_DIR
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы