Как установить MEDIA_ROOT и MEDIA_URL при развертывании приложения django в Heroku - PullRequest
2 голосов
/ 15 марта 2012

Я развернул приложение на Heroku, используя их бесплатную учетную запись.

Мои файлы js и css находятся в папке с именем 'media'. Похоже, они обычно помещаются в «статичный», но проект, над которым я строил, уже содержал их в средствах массовой информации, поэтому я просто пошел с ним.

Итак, у меня есть:

<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/style.css" />

И в моем файле settings.py у меня есть:

abspath = lambda *p: os.path.abspath(os.path.join(*p))

PROJECT_ROOT = abspath(os.path.dirname(__file__))

MEDIA_ROOT = abspath(PROJECT_ROOT, 'media')
MEDIA_URL = '/media/'

После того, как я развернул свое приложение, я установил:

DEBUG = False

А теперь мои шаблоны отображаются без CSS. Я искал вокруг, и это похоже на проблему с MEDIA_ROOT и MEDIA_URL. Большая часть информации, которую я нахожу, связана с тем, чтобы заставить статические файлы работать в производстве, или о том, как заставить медиа-файлы работать в разработке. Это похоже на получение медиа-файлов для работы в производстве.

Что именно я должен установить для MEDIA_ROOT и MEDIA_URL?

РЕДАКТИРОВАТЬ: я должен отметить, что я не буду загружать что-либо в папку «медиа».

Ответы [ 3 ]

12 голосов
/ 15 марта 2012

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

STATIC_URL и STATIC_ROOT вместе определяют расположение статических ресурсов, которые будут выгружаться командой управления collectstatic, и впоследствии, какой префикс URL будет использоваться для их извлечения. Вы на самом деле никогда ничего не вставляете в STATIC_ROOT.

Если вы не будете использовать медиа для загрузки, вам следует изменить его имя на другое. Я склонен использовать «активы» для моих общих статических ресурсов на уровне проекта, но название не имеет значения («медиа» используется для MEDIA_ROOT 99 раз из 100, поэтому это просто сбивает с толку). Что бы вы ни использовали, добавьте полный путь к каталогу STATICFILES_DIRS.

Затем на производстве вы запускаете python manage.py collectstatic. Все файлы в «статическом» каталоге каждого приложения, а также в каждом каталоге в STATICFILES_DIRS будут сохранены в STATIC_ROOT. Затем вы настраиваете свой веб-сервер (Apache, nginx и т. Д.) Для обслуживания STATIC_ROOT при STATIC_URL.

В Django 1.3 вам также нужно указать ADMIN_MEDIA_PREFIX, чтобы заставить администратора работать:

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

В Django 1.4 это больше не нужно.

1 голос
/ 15 марта 2012

Amazon S3 кажется первым на многих блогах: http://caseycesari.github.io/2012/01/02/s3-heroku-django.html

Мне удалось подать статические файлы из heroku, однако это был кошмар: |

Поэтому, если вы не можете поместить их в БД, просто попробуйте, если вы можете поместить свои статические файлы в свободное хранилище.

0 голосов
/ 21 декабря 2012

Вы можете добавить следующее к вашему settings.py

import os.path
root = os.path.dirname(__file__).replace('\\','/')

Затем используйте переменную root, чтобы вычислить путь относительно вашей установки django, где бы она ни находилась.Все это предполагает, что ваш комбинированный размер пули ниже максимума Heroku.

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