2015-06-26 2 views
15

Я пытаюсь развернуть свое приложение django на heroku. Все статические файлы обслуживаются whitenoise и успешно перенесены. Но как мне получить мои медиафайлы, которые загружаются с использованием ImageField для отображения во время производства.Служебные медиафайлы во время развертывания в django 1.8

мой settings.py

STATIC_URL = '/static/' 
STATIC_ROOT = 'C:/Users/Sak/mpro/feat/static/' 
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 
MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR, "media") 

wsgi.py

import os 

from django.core.wsgi import get_wsgi_application 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mpro.settings") 

application = get_wsgi_application() 

try: 
    from django.core.wsgi import get_wsgi_application 
    from whitenoise.django import DjangoWhiteNoise 
    application = get_wsgi_application() 
    application = DjangoWhiteNoise(application) 
    from dj_static import Cling 
    application = Cling(get_wsgi_application()) 
except: 
    pass 

urls.py

urlpatterns = [ 
url(r'^', include('feat.urls', namespace="feat")), 
url(r'^admin/', include(admin.site.urls)), 
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

Все мои медиа-файлы, загруженные base_dir/media/media и когда whitenoise собирает статические файлы, которые он собирает только файлы на STATIC_ROOT, так как я могу развернуть мои медиафайлы. Когда я запустил heroku run ls, я вижу папку с носителями.

+2

Ну, файлы на носителях должны быть данными во время выполнения, связанными с данными в базе данных, поэтому они не копируются, так же, как они не будут копировать данные из базы данных. Полагаю, вы могли бы использовать светильники, если вам нужны какие-то исходные данные. В противном случае, вы в значительной степени уверены, я полагаю. – spectras

+0

Я понимаю, что они не копируются так же, как статические файлы, но должен быть способ добавления медиа-изображений. Может быть, даже после производства, если я хочу добавить новые изображения в мой администратор, должен быть способ сохранить его где-нибудь, чтобы они были скопированы слишком. Можете быть в папке статических файлов, где они скопированы вместе со статическими файлами. – WutWut

+0

You могут либо загрузить их, что приведет к тому, что Django поместит их там, либо вы можете скопировать файлы вручную и назначить 'instance.image.path' прямое указание на них в каком-то скрипте. Путь должен относиться к «MEDIA_ROOT». – spectras

ответ

5

Итак, прежде всего важно понимать, что если у вас есть куча файлов, которые являются частью вашего проекта (включая такие вещи, как изображения и т. Д.), А также развернуты вместе с ним, они, скорее всего, будут статическими файлами чем медиафайлы на языке Django.

Файлы мультимедиа в Django предназначены для загруженных файлов времени исполнения. Обычно они хранятся с соответствующей записью db, такой как models.ImageField(upload_to='/photos'), но это не обязательно так.

Ваша установка СМИ неправильно для Heroku, так как вы не должны писать в директорию на сервере в любом случае (это то, что вы рассказываете Джанго делать с MEDIA_ROOT = os.path.join(BASE_DIR, "media").

Чаще всего вы бы вместо того, чтобы использовать ... S3 ведро для средств массовой информации на Heroku This является достаточно всеобъемлющим объяснением, что вы, вероятно, можете пропустить немного о CORS и идти на открытые разрешения на ведро (в зависимости от случая использования) важные биты:

# settings.py 

# Tell django what URL to server your media from 
MEDIA_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN 

# Tell Django to use the boto storage backend to save media files. 
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 

Если вы хотите использовать S3 для статического и медиа-хранилища, ссылка поясняет, что для о.

Возможно, вы захотите взглянуть на this repo на довольно полное снижение настроек AWS и то, что они делают, плюс красиво упакованный пакет, чтобы сделать что-то из этого для вас.

В целом я нашел Django Herokuify исключительно полезным для всех шаблонов на Heroku.

Смежные вопросы