Wut*_*Wut 16 python django heroku django-media django-staticfiles
我正在尝试在heroku上部署我的django应用程序.所有静态文件都由whitenoise成功提供并迁移.但是如何ImageField在生产期间获取用于上传的媒体文件.
我的 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")
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
我的所有媒体文件都上传到base_dir/media/media,当whitenoise收集静态文件时,它只收集文件STATIC_ROOT,所以如何部署我的媒体文件.当我运行时,heroku run ls我可以看到文件夹媒体.
所以,首先重要的是要意识到如果你有一堆文件属于你的项目(包括像图像之类的东西)并随之一起部署,它们更可能是静态文件而不是媒体文件. Django的说法.
Django中的媒体文件用于运行时上传的文件.它们通常与相应的数据库条目一起存储,models.ImageField(upload_to='/photos')但不一定如此.
Heroku的媒体设置是错误的,因为你不应该写到服务器上的目录(这就是你告诉Django要做的事情MEDIA_ROOT = os.path.join(BASE_DIR, "media").
最常见的是你会在Heroku上使用S3存储桶作为媒体.这是一个相当全面的解释.您可以跳过有关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'
Run Code Online (Sandbox Code Playgroud)
如果您想将S3用于静态和媒体存储,该链接也会解释这一点.
您可能希望查看此repo以获得相当全面的AWS设置及其功能,以及一个包装精美的程序包,以便为您完成一些操作.
更一般地说,我发现Django Herokuify对Heroku上的所有样板都特别有用.
| 归档时间: |
|
| 查看次数: |
2937 次 |
| 最近记录: |