簡體   English   中英

在Heroku上部署django app時,如何設置MEDIA_ROOT和MEDIA_URL

[英]What to set MEDIA_ROOT and MEDIA_URL to when deploying django app on Heroku

我已經使用他們的免費帳戶在Heroku上部署了一個應用程序。

我在一個名為'media'的文件夾中有我的js和css文件。 看起來這些通常都放在'靜態'中,但是我在上面構建的項目已經將它們放在媒體中,所以我只是選擇了它。

所以我有:

<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設置為什么?

編輯:我應該指出我不會將任何內容上傳到'media'文件夾。

MEDIA_URLMEDIA_ROOT一起決定在那里上傳去的,即任何加到FileField S或ImageField ,在你的模型。

STATIC_URLSTATIC_ROOT一起規定了collectstatic管理命令將轉儲靜態資源的位置,以及隨后將使用哪個URL前綴來獲取它們。 你實際上並沒有手動將任何東西放在STATIC_ROOT

如果您不使用媒體進行上傳,則應將其名稱更改為其他內容。 我傾向於使用“資產”作為我的一般項目級靜態資源,但名稱無關緊要(“媒體”用於MEDIA_ROOT 99次中的100次,所以它只是令人困惑)。 無論您使用什么,請將完整目錄路徑添加到STATICFILES_DIRS

然后,在生產中運行python manage.py collectstatic 每個應用程序的“靜態”目錄中的所有文件以及STATICFILES_DIRS每個目錄都將轉儲到STATIC_ROOT 然后設置您的Web服務器(Apache,nginx等)以在STATIC_ROOT處提供STATIC_URL

在Django 1.3中,您還需要指定ADMIN_MEDIA_PREFIX以使管理員工作:

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

在Django 1.4中,這將不再是必要的。

亞馬遜S3似乎是許多博客上的第一件事: http//caseycesari.github.io/2012/01/02/s3-heroku-django.html

我確實設法從heroku提供靜態文件,但這是噩夢:|

因此,除非您可以將它們放入數據庫中,否則只需嘗試將靜態文件放在某個免費存儲空間即可。

您可以將以下內容添加到settings.py

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

然后使用root變量計算相對於django安裝的路徑,無論它在哪里。 這一切都假設您的組合段塞大小在Heroku最大值之下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM