Heroku - 在 Django 应用程序中处理静态文件

Posted

技术标签:

【中文标题】Heroku - 在 Django 应用程序中处理静态文件【英文标题】:Heroku - Handling static files in Django app 【发布时间】:2012-02-21 06:06:23 【问题描述】:

我在 heroku 中有一个项目 (myapp),但我无法让静态文件正常工作。我在关注这个blog post。

我的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

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

【问题讨论】:

我最近写了一篇关于从 Heroku 应用程序在 S3 上提供静态文件的详细说明,请查看 - balzerg.blogspot.co.il/2012/09/… 【参考方案1】:

我找到了解决方案。这是我最初的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 试试from django.conf import settings ***.com/questions/10308985/… 对我来说,使用 Django 1.5.1,'django.contrib.staticfiles.views' 有效,而 'django.views.static.serve' 没有。【参考方案2】:

您可能应该在运行“./manage.py collectstatic”之前手动创建设置中指定的空 STATIC_ROOT 文件夹。

【讨论】:

以上是关于Heroku - 在 Django 应用程序中处理静态文件的主要内容,如果未能解决你的问题,请参考以下文章

将 Cookiecutter-Django 应用程序部署到 Heroku 时出错

在 Heroku 中使用 Braintree 和 Django 应用程序

Django 项目的 Heroku 日志丢失错误

Django 迁移在 Heroku 中失败

在 Heroku 上的 Django 应用中启用 CORS

Heroku 中没有运行 Django 的 Web 进程