Heroku上的Django - 破碎的管理员静态文件

时间:2012-04-25 03:32:42

标签: django heroku django-admin

我在Heroku / Cedar上运行了一个Django应用程序,根据https://devcenter.heroku.com/articles/django

中的说明配置

按照Heroku的说明使用gunicorn无法包含Django管理员运行所需的静态文件。我可以将Procfile更改为“manage.py run_gunicorn”以进行本地开发,但这不会在Heroku上运行。

我已经搜遍了所有修复程序 - 是否有一些方法可以包含管理静态文件而不会将其与其他静态文件一起放在S3上?

9 个答案:

答案 0 :(得分:8)

如果您使用runserver并使用DEBUG = True配置您的应用程序,那么它将像开发计算机一样提供管理文件。但是,这绝对不是推荐的方法,我建议你把它们放在S3上。

使用django-storages应用程序,可以非常轻松地配置collectstatic以自动将所有管理文件推送到S3。您可以找到路线here

答案 1 :(得分:8)

查看此帖子:http://matthewphiong.com/managing-django-static-files-on-heroku

如果这不起作用,请尝试在正常的url模式元组之后将以下内容添加到urls.py中。确保你已经设置了STATIC_ROOT,并且在推送到heroku之前,你已经在本地环境中运行了collect static。

urlpatterns += patterns('',
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.STATIC_ROOT,
    }),
 )

答案 2 :(得分:5)

只需添加这些

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()

使用django 1.4.1

答案 3 :(得分:3)

创造静态&#39;将文件夹放入您的&#39; project_directory&#39;。

设置&#39; STATIC_ROOT&#39;路径在&#39; settings.py&#39;可以为您管理网站的静态文件提供服务的文件。

STATIC_ROOT = (os.path.join(os.path.dirname(__file__), '..', 'static'))

在&#39; /urls.py'

中添加STATIC_ROOT
from django.conf import settings
    urlpatterns += patterns('',
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.STATIC_ROOT,
        }),
    )

运行以下命令,将所有管理静态文件复制到项目的静态文件夹中。

python manage.py collectstatic

现在执行git add,commit和push heroku master。

答案 4 :(得分:3)

与询问日期相比,这似乎不太晚。但我陷入了这个问题,花了30分钟就做错了。所以这里是那些可能陷入这个陷阱的人的神奇解决方案。

Heroku的django.contrib.staticfiles.urls

存在一些问题

解决方案

您需要在Heroku设置上安装dj-staticLink to download)。 这是一个Django中间件实用程序,允许使用像Gunicorn这样的WSGI服务器正确地为生产提供静态资产。

我希望这会对某人有所帮助。

答案 5 :(得分:1)

我让django管理员使用以下编辑

urls.py(最后)

import settings
urlpatterns += patterns('',
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.STATIC_ROOT,
    }),
)

Procfile

web: gunicorn hellodjango.wsgi -b 0.0.0.0:$PORT

答案 6 :(得分:0)

'django.contrib.staticfiles.views.serve'

而不是

'django.views.static.serve'

答案 7 :(得分:0)

按照此操作修复Django和heroku的所有静态相关问题。

-X: unknown command 'rails s' 粘贴到最后

settings.py

特定应用的模板应位于import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), ) TEMPLATE_DIRS = ( os.path.join(BASE_DIR,'templates'), ) STATIC_URL = '/static/'

渲染模板时,您将指定app_name/templates/app_name/

template name

中的

views.py

..... return render(request,'app_name/template_name.html',context) 将您的文件放在此处:

static files

project_folder/app_name/static/app_name/css

project_folder/app_name/static/app_name/js

访问您的静态文件使用路径project_folder/app_name/static/app_name/img

如果你这样做,你的所有静态文件都会在heroku以及本地开发机器中正常加载。

答案 8 :(得分:0)

如果你在不使用whitenoise(我建议)的情况下部署到Heroku,请务必使用dj_static https://pypi.python.org/pypi/dj-static

我花了3个小时尝试将文件提供给heroku,dj_static在2分钟内完成了工作。