【问题标题】:Static files not loading on Heroku : Django 1.6静态文件未在 Heroku 上加载:Django 1.6
【发布时间】:2018-03-08 22:34:54
【问题描述】:

我正在 Heroku 上部署我的 Django 应用程序。它已成功部署。但是静态文件没有加载。

我关注了this 链接,但是当包含 Whitenoise 3.x 时,命令

python manage.py collectstatic --noinput

失败。

我的 Procfile:

python manage.py collectstatic --noinput
web:python manage.py runserver
web: gunicorn MovieTracker.wsgi --log-file -
heroku ps:scale web=1

我也尝试过:

heroku config:set DISABLE_COLLECTSTATIC=1

还有:

heroku config:set DISABLE_COLLECTSTATIC=0

settings.py 文件为:

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

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tracker',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 'whitenoise.middleware.WhiteNoiseMiddleware',
)

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "/tracker/static")
# STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

启用白噪声,错误:

【问题讨论】:

  • 另外,您的 Procfile 已完全损坏。它应该包含的唯一内容是第二行,web: gunicorn MovieTracker.wsgi --log-file -
  • 我在问题中提到过,当我启用白噪声时,collectstatic 命令失败。以及我提到的“尝试过”的相同链接。
  • 调试设置为真吗?如果将 debug 设置为 false,django 将无法提供静态文件。
  • @ParijatPurohit 无关紧要,OP 想使用 WhiteNoise 来提供静态文件。
  • @DanielRoseman 甚至尝试过使用那一行。

标签: python django heroku django-staticfiles


【解决方案1】:

您应该删除 STATIC_ROOT 子路径上的前导斜杠。

STATIC_ROOT = os.path.join(BASE_DIR, "tracker/static")

【讨论】:

  • 您确实需要显示来自 collectstatic 的实际错误消息。
  • 构建或日志中没有错误。构建:成功。日志:状态从starting变为Up。
  • 正如您所提到的,当我纠正错误时,collectstatic 工作正常。但仍然没有加载静态文件。
  • 这个应该是什么状态? heroku 配置:设置 DISABLE_COLLECTSTATIC=0 或 1 ?
  • 我应该在设置中加入白噪声吗?
【解决方案2】:

项目中whitenoise和Django存在版本冲突。 该项目使用 Django 1.6,而使用的 whitenoise 版本是

白噪声 3.x

兼容性如下:

带有 Whitenoise 2.x 的 Django 1.6 及更低版本

this 链接中给出了 whitenoise 2.x 的设置。

带有 Whitenoise 3.x 的 Django 1.7 及更高版本

关注 this 获取白噪声 3.x。

在 requirements.txt 中相应地设置版本。

在 Procfile 中,只需以下行就足够了。

web: gunicorn MovieTracker.wsgi --log-file

【讨论】:

  • 另请注意,对 Django 1.6(包括安全修复)的支持已于 2015 年 4 月结束,因此您应该将项目升级到更新的版本。
猜你喜欢
  • 2015-05-11
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 2014-03-20
  • 2019-08-31
  • 2014-11-12
  • 2021-04-03
  • 2012-01-21
相关资源
最近更新 更多