2012-03-14 40 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最大值以下。

相关问题