2012-03-14 93 views
2

我已經使用其免費帳戶在Heroku上部署了一個應用程序。如何在Heroku上部署django應用程序時設置MEDIA_ROOT和MEDIA_URL

我有我的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設置爲什麼?

編輯:我應該指出,我不會上傳任何東西到'媒體'文件夾。

回答

1

亞馬遜S3似乎是一件事對嘗試在許多博客: http://www.caseypthomas.org/blog/utilizing-s3-for-a-heroku-django-app

我也設法從Heroku的靜態文件,但它是一場噩夢:|

所以,除非你可以把它放在數據庫中,否則就試試如果你可以把你的靜態文件放在一些免費的存儲上。

+0

我確實把所有的靜態文件放在S3上,並讓它工作。你知道你是否應該把所有的管理媒體文件放在那裏?這就是我最終做的,但似乎有更好的辦法... – SecondMatter 2012-03-15 15:43:47

+0

管理文件?不,他們在heroku上開箱即可。創建項目後的第一件事情我確實啓用了管理網站,它工作! – 2012-03-19 20:37:42

+0

但S3可能比heroku更快。所以它也不錯。 (有人聲稱,在獨立提供商託管SQL可以提高您的請求每分鐘的最大限制8倍!因此,如果此設置爲您工作,請不要更改它。) – 2012-03-21 15:16:02

12

MEDIA_URLMEDIA_ROOT一起決定上傳的位置,即任何添加到您的模型上的FileField s或ImageField s的地方。

STATIC_URLSTATIC_ROOT一起指示靜態資源將由collectstatic管理命令轉儲的位置,隨後將使用哪些URL前綴來獲取它們。你實際上並沒有手動將任何東西放入STATIC_ROOT

如果您不會使用媒體進行上傳,您應該將其名稱更改爲其他名稱。我傾向於將「資產」用於我的常規項目級靜態資源,但名稱無關緊要(「媒體」用於100次中的99次,因此僅僅是令人困惑)。無論您使用什麼,請將完整的目錄路徑添加到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,這將不再是必要的。

0

您可以添加以下到您的settings.py

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

然後用root變量來計算相對於你的Django的路徑安裝,無論它是。這一切都假設您的組合slu size尺寸在Heroku最大值以下。

相關問題