2012-04-25 92 views
14

我有一個Django應用程序在Heroku /雪松運行,配置爲按照指示在https://devcenter.heroku.com/articles/django的Django在Heroku - 破碎管理員靜態文件

使用gunicorn按照Heroku的指示不包括Django的管理員所需的靜態文件功能。我可以將Procfile更改爲「manage.py run_gunicorn」以進行本地開發,但這不適用於Heroku。

我已經搜索了所有的修補程序 - 是否有一些方法來包含管理靜態文件,而不會將它們扔在S3與我的其他靜態文件?

回答

8

如果您使用runserver並使用DEBUG = True配置您的應用程序,那麼它將像在您的開發計算機上一樣提供管理文件。但是,這絕對不是推薦的方式,我建議你把它們放在S3上。

使用django-storage應用程序很容易配置collectstatic以自動將所有管理文件推送到S3。你可以找到方向here

8

退房這個帖子:http://matthewphiong.com/managing-django-static-files-on-heroku

如果您嘗試添加下列到正常的URL模式元組後您的urls.py不起作用。確保您已設置STATIC_ROOT,並且在推送到heroku之前,您已在本地環境中運行收集靜態。

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

對我來說,使用Django 1.5.1,['django.contrib.staticfiles.views'](https://docs.djangoproject.com/en/1.5/ref/contrib/staticfiles/#django.contrib.staticfiles .views.serve)工作,而'django.views.static.serve'沒有。 – snakesNbronies 2013-06-16 05:23:43

+0

感謝您的注意 - 我認爲路徑改爲1.5 – 2013-06-17 14:21:56

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 
5

只需添加這些替代

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

使用Django 1.4.1

0

'django.contrib.staticfiles.views.serve'

,而不是

'django.views.static.serve'

3

創建 '靜態'文件夾放到你的'project_directory'中。

在'settings.py'文件中設置'STATIC_ROOT'路徑,該文件可以爲您的管理站點的靜態文件提供服務。

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

在「/urls.py」

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

運行以下命令,將所有管理靜態文件複製到項目的靜態文件夾添加STATIC_ROOT。

python manage.py collectstatic 

現在做git添加,提交併推送heroku主。

3

與要求的日期相比,它似乎遲了一點。但我進入這個問題,花了30分鐘,我做錯了什麼。所以對於那些陷入這個陷阱的人來說,這是一個神奇的解決方案。

有一些問題,Heroku的django.contrib.staticfiles.urls

SOLUTION

您需要在您的Heroku安裝程序安裝dj-staticLink to download)。 這是一個Django中間件實用程序,它允許使用像Gunicorn這樣的WSGI服務器從生產中正確提供靜態資產。

我希望這會幫助別人。

+0

將此添加到設置實際上是Heroku教程的一部分。我完成了這些說明,並且在管理中仍然存在相同的問題,所以這似乎不是一個有效的解決方案。 – rschwieb 2015-01-03 18:32:50

+0

當時它適用於我。我不知道爲什麼現在不行。 – Kshitij 2015-01-03 18:47:08

+0

工作!卓越的兄弟! – 2016-12-22 04:11:20

0

請按照此解決所有與Django和heroku相關的靜態相關問題。

在你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/

當您呈現模板,這是你將如何在views.py指定template name

..... 
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

訪問您的靜態文件使用路徑app_name/css/style_name.css

如果遵循這一點,所有的靜態文件會在heroku以及本地開發機器中加載得很好。