Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku上的Django-损坏的管理静态文件_Django_Heroku_Django Admin - Fatal编程技术网

Heroku上的Django-损坏的管理静态文件

Heroku上的Django-损坏的管理静态文件,django,heroku,django-admin,Django,Heroku,Django Admin,我有一个在Heroku/Cedar上运行的Django应用程序,按照 按照Heroku的指示使用gunicorn无法包含Django管理员运行所需的静态文件。我可以将Procfile更改为“manage.py run\u gunicorn”以进行本地开发,但这不会在Heroku上运行 我已经搜索了所有的修复程序-是否有办法在不将管理员静态文件与其他静态文件一起放到S3上的情况下包含这些静态文件?如果使用runserver并将应用程序配置为DEBUG=True,那么它将像在开发机器上一样为管理员文

我有一个在Heroku/Cedar上运行的Django应用程序,按照

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


我已经搜索了所有的修复程序-是否有办法在不将管理员静态文件与其他静态文件一起放到S3上的情况下包含这些静态文件?

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

使用django storages应用程序,很容易将collectstatic配置为自动将所有管理文件推送到S3。你可以找到方向查看这篇文章:

如果这对您不起作用,请尝试在正常url模式元组之后向url.py添加以下内容。在推送到heroku之前,请确保您拥有STATIC_根集,并且在本地环境中运行了collect STATIC

urlpatterns += patterns('',
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.STATIC_ROOT,
    }),
 )
urlpatterns+=模式(“”,
url(r'^static/(?P.*)$,'django.views.static.service'{
“document\u root”:settings.STATIC\u root,
}),
)

我让django管理员处理以下编辑

py(在末尾)

只需添加这些即可

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

使用django 1.4.1

'django.contrib.staticfiles.views.service'

而不是


“django.views.static.service”

将“static”文件夹创建到“project\u目录”中

在“settings.py”文件中设置“STATIC_ROOT”路径,它可以为管理员站点的静态文件提供服务

STATIC_ROOT = (os.path.join(os.path.dirname(__file__), '..', 'static'))
在“/url.py”中添加静态根目录

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

现在进行git添加、提交和推送heroku master。

与要求的日期相比似乎有点晚。但我进入了这个问题,花了30分钟来解释我做错了什么。因此,对于那些可能落入这个陷阱的人来说,这是一个神奇的解决方案

Heroku的
django.contrib.staticfiles.URL有一些问题

解决方案

您需要在Heroku安装程序上安装
dj static
()。 这是一个Django中间件实用程序,允许使用像Gunicorn这样的WSGI服务器从生产中正确地服务静态资产。


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

遵循这一点,解决Django和heroku的所有静态相关问题

在您的
settings.py中,将其粘贴到末尾

import settings
urlpatterns += patterns('',
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.STATIC_ROOT,
    }),
)
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\u name/templates/app\u name/

渲染模板时,这是指定
模板名称的方式

views.py中

.....
return render(request,'app_name/template_name.html',context)
对于
静态文件
请将文件放在此处:

project\u folder/app\u name/static/app\u name/css

project\u folder/app\u name/static/app\u name/js

project\u folder/app\u name/static/app\u name/img

要访问静态文件,请使用path
app\u name/css/style\u name.css


如果您遵循这一点,您的所有静态文件将在heroku以及本地开发机器中正常加载。

如果您部署到heroku而不使用whitenoise(我建议),则一定要使用dj_static


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

对于我来说,使用Django 1.5.1可以工作,而“Django.views.static.serve”没有。谢谢你的提醒-我认为在1.5中改变了路径,将其添加到设置中实际上是heroku教程的一部分。我完成了这些说明,但在管理中仍然存在相同的问题,所以这似乎不是一个有效的解决方案。它在当时对我有效。我不知道为什么它现在不起作用,起作用了!好兄弟!与版本:3.1.5一起使用。:)特别是将其添加到包含“path('admin/',admin.site.url),”的相同urlpatterns列表中
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/'
.....
return render(request,'app_name/template_name.html',context)