Heroku - 如何在 Django 应用中处理静态文件

36

我在heroku上有一个项目(myapp),但是我无法正确地使用静态文件。我遵循了这篇博客文章

我的Procfile看起来是这样的:

web: python myapp/manage.py collectstatic --noinput; bin/gunicorn_django --workers=4 --bind=0.0.0.0:$PORT myapp/settings.py

settings.py:

...

STATIC_ROOT = os.path.join(PROJECT_PATH, 'staticfiles')
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'

STATICFILES_DIRS = (
    # I have the static folder inside my app and not inside the project
    os.path.join(PROJECT_PATH, 'cesar/static'),
)

...

使用heroku restart重启时,heroku logs显示的内容如下:

...
Copying ...

114 static files copied to '/app/myapp/staticfiles'.
...

但是当我执行heroku run ls -l myapp/命令时,我看不到staticfiles文件夹:

-rw------- 1 u5605 5605    0 Jan 28 16:53 __init__.py
drwx------ 4 u5605 5605 4096 Jan 28 16:53 cesar
-rw------- 1 u5605 5605  503 Jan 28 16:53 manage.py
-rw------- 1 u5605 5605 6292 Jan 28 16:53 settings.py
drwx------ 2 u5605 5605 4096 Jan 28 16:53 templates
-rw------- 1 u5605 5605  257 Jan 28 16:53 urls.py
-rw------- 1 u5605 5605  286 Jan 28 16:53 views.py

我错过了什么或者做错了什么?


2
我最近写了一篇详细的说明,介绍如何从Heroku应用程序中将静态文件存储在S3上,请查看 - http://balzerg.blogspot.co.il/2012/09/staticfiles-on-heroku-with-django.html - idanzalz
2个回答

39

我找到了一个解决方案。这是我的初始myapp/urls.py文件:

from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin
from django.conf import settings


admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', include('myapp.cesar.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

我在原始的myapp/urls.py文件的末尾添加了这些行:

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

现在它正常运行。我希望这也能帮助其他人。


我尝试做这个,但是我遇到了这个错误,我的应用程序崩溃了。有什么想法吗? 2012-03-23T21:55:57+00:00 app[web.1]: ImportError: Could not import settings 'appName/settings.py' (Is it on sys.path?): Import by filename is not supported. - Aswath Krishnan
1
@Aswath 请尝试使用 from django.conf import settings - Francis Yaconiello
https://dev59.com/lGkv5IYBdhLWcg3w1kWr - Dmitry
1
对我来说,在使用Django 1.5.1时,'django.contrib.staticfiles.views'可用,而'django.views.static.serve'则不行。 - snakesNbronies

0

在运行 './manage.py collectstatic' 命令之前,你应该手动创建在设置中指定的空的 STATIC_ROOT 文件夹。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接