Python 在Heroku上部署django应用程序时,将MEDIA_ROOT和MEDIA_URL设置为什么

Python 在Heroku上部署django应用程序时,将MEDIA_ROOT和MEDIA_URL设置为什么,python,django,heroku,Python,Django,Heroku,我已经使用Heroku的免费帐户在Heroku上部署了一个应用程序 我把我的js和css文件放在一个叫做“媒体”的文件夹里。看起来这些东西通常是放在“静态”中的,但我在上面构建的项目已经在媒体上有了它们,所以我就这么做了 因此,我: <link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/style.css" /> 部署应用程序后,我设置: DEBUG = False 现在我的模

我已经使用Heroku的免费帐户在Heroku上部署了一个应用程序

我把我的js和css文件放在一个叫做“媒体”的文件夹里。看起来这些东西通常是放在“静态”中的,但我在上面构建的项目已经在媒体上有了它们,所以我就这么做了

因此,我:

<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/style.css" />
部署应用程序后,我设置:

DEBUG = False
现在我的模板在没有CSS的情况下呈现。我四处搜索,它看起来像是媒体根和媒体URL的问题。我发现的大部分内容都是关于让静态文件在生产中工作,或者让媒体文件在开发中工作。这看起来像是让媒体文件在生产中工作

我应该将媒体根目录和媒体URL设置为什么


编辑:我应该指出我不会上传任何东西到“媒体”文件夹

MEDIA\u URL
MEDIA\u ROOT
共同决定上传的位置,即添加到您的模型上的
FileField
s或
ImageField
s的任何内容

STATIC\u URL
STATIC\u ROOT
一起指示
collectstatic
管理命令将转储静态资源的位置,以及随后将使用哪个URL前缀来获取它们。实际上,您从未手动将任何内容放入
静态\u ROOT

如果您不使用介质上传,您应该将其名称更改为其他名称。我倾向于将“资产”用于我的一般项目级静态资源,但名称并不重要(“media”用于
media\u ROOT
99次,所以这只是混淆)。无论您使用什么,请将完整目录路径添加到
STATICFILES\u DIRS

然后,在生产环境中运行
python manage.py
。每个应用程序的“静态”目录中的所有文件以及
STATICFILES\u DIRS
中的每个目录都将转储到
static\u ROOT
中。然后设置Web服务器(Apache、nginx等)以在
STATIC\u URL
上提供
STATIC\u ROOT

在Django 1.3中,您需要指定
ADMIN\u MEDIA\u前缀
,以使管理员正常工作:

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

在Django 1.4中,这将不再是必需的。

Amazon S3似乎是在许多博客上尝试的第一件事:

我确实设法从heroku提供静态文件,但这是一场噩梦:|


因此,除非您可以将静态文件放在DB中,否则只要尝试一下是否可以将静态文件放在一些免费存储空间中即可。

您可以将以下内容添加到
设置中。py

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

然后使用
root
变量计算相对于django安装的路径,无论它位于何处。这一切都假设您的组合slug大小低于Heroku的最大值。

我确实将所有静态文件放在了S3上,并使其正常工作。你知道你是否应该把所有的管理媒体文件也放在那里吗?这就是我最后要做的,但似乎有更好的方法…管理文件?不,他们在heroku身上是开箱即用的。创建项目后的第一件事就是我启用了管理站点,它成功了!但是S3可能比heroku快。所以也不错。(有些人声称,在独立提供商上托管SQL可以将您的每分钟请求最大限制提高8倍!因此,如果此设置对您有效,请不要更改它。)链接似乎已断开。如果您确实希望在会话中使用媒体文件,该怎么办?在会话结束后,媒体文件可以被删除,这使得使用AWS s3是一种过度使用(?)
import os.path
root = os.path.dirname(__file__).replace('\\','/')