Heroku / Django - 静态文件被复制但不可能显示它们

时间:2014-10-12 02:16:36

标签: django heroku django-staticfiles

我在heroku中有一个项目,但我无法让静态文件正常工作。

settings.py:

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder",
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
)

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATICFILES_DIRS = ()

我已经看到很多问题都是通过将其添加到网址来解决的,所以我已经完成了它,但它并没有改变任何东西。

urls.py:

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

然后collectstatic正常工作:

-----> Preparing static assets
   Running collectstatic...
   673 static files copied to '/app/static'.

所以它们是作为命令发送的:heroku run ls -l说:

heroku run ls -l
Running `ls -l` attached to terminal... up, run.9609
total 76
-rw-------  1 u3968 3968   16 2014-10-12 02:05 contributors.txt
drwx------  2 u3968 3968 4096 2014-10-12 02:05 corelib
-rw-------  1 u3968 3968  137 2014-10-12 02:05 dev-requirements.txt
-rwx------  1 u3968 3968  810 2014-10-12 02:05 go.sh
-rw-------  1 u3968 3968    0 2014-10-12 02:05 __init__.py
-rw-------  1 u3968 3968  129 2014-10-12 02:05 __init__.pyc
-rwx------  1 u3968 3968  898 2014-10-12 02:05 manage.py
-rw-------  1 u3968 3968   12 2014-10-12 02:05 Procfile
-rw-------  1 u3968 3968  851 2014-10-12 02:05 requirements.txt
-rw-------  1 u3968 3968   13 2014-10-12 02:05 runtime.txt
-rw-------  1 u3968 3968 7385 2014-10-12 02:05 settings.py
-rw-------  1 u3968 3968 6750 2014-10-12 02:05 settings.pyc
drwx------ 10 u3968 3968 4096 2014-10-12 02:05 static
drwx------  3 u3968 3968 4096 2014-10-12 02:05 templates
drwx------  3 u3968 3968 4096 2014-10-12 02:05 theming
-rw-------  1 u3968 3968 3482 2014-10-12 02:05 urls.py
drwx------  3 u3968 3968 4096 2014-10-12 02:05 useraccount
-rw-------  1 u3968 3968  200 2014-10-12 02:05 wsgi.py

但是url / static返回404作为heroku的日志:

2014-10-12 02:06:05.751101+00:00 heroku router - - at=info method=GET path="/static/css/screen.css"   ... dyno=web.1 connect=0ms service=54ms status=404 bytes=1879

我错过了什么?

4 个答案:

答案 0 :(得分:1)

您的URL无关紧要,因为当DEBUG为False时,Django不提供静态文件。您需要将服务器配置为独立完成:通常您可以通过Apache / nginx执行此操作,但Heroku不会使用它们。然而,full documentation有关如何使其正常工作的问题,其归结为安装dj-static并包装您的WSGI应用程序。

答案 1 :(得分:0)

您的settings.py应该是这样的:

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

...

答案 2 :(得分:0)

您是否尝试过{%static“css / screen.css”%}

答案 3 :(得分:0)

好吧我已经通过将它们发送到git来对我的所有静态文件进行版本化,所以现在它可以工作了!

我试图做两件相反的事情......不是将静态发送到git而不是使用第三个应用程序来收集它们......