我在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
我错过了什么?
答案 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而不是使用第三个应用程序来收集它们......