【问题标题】:heroku local static not found未找到heroku本地静态
【发布时间】:2016-09-10 18:16:04
【问题描述】:

'heroku local' 找不到静态文件,但 'python manage.py runserver' 可以毫无问题地找到静态文件。你能帮我解决这个问题吗?

settings.py 内容为:

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

我运行 collectstatic 并将静态文件复制到 STATIC_ROOT:

python manage.py collectstatic

manage.py runserver' 找到没有问题的静态文件:

python manage.py runserver

虽然“heroku local”返回警告“未找到”:

11:52:04 AM web.1 |  [19/May/2016 10:52:04] WARNING [django.request:170] Not Found: /static/admin/css/base.css
11:52:04 AM web.1 |  [19/May/2016 10:52:04] WARNING [django.request:170] Not Found: /static/admin/css/base.css
11:52:04 AM web.1 |  [19/May/2016 10:52:04] WARNING [django.request:170] Not Found: /static/admin/css/login.css
11:52:04 AM web.1 |  [19/May/2016 10:52:04] WARNING [django.request:170] Not Found: /static/admin/css/login.css

不确定这里发生了什么。 “heroku local”和“manage.py runserver”都应该看到静态文件。

注意: 我正在使用 Django==1.8.2 和 settings.py 包含:

import os
import dj_database_url

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

SECRET_KEY = 'secretkey'

DEBUG = True

ALLOWED_HOSTS = []

INSTALLED_APPS = (
    # 'django.contrib.sites',
    'django.contrib.admin',
    'registration',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'dbbackup',
    'listable',
    'rest_framework',
    'bootstrap3',
    'django_crontab',
)

ACCOUNT_ACTIVATION_DAYS = 7 # One-week activation window; you may, of course, use a different value.
REGISTRATION_AUTO_LOGIN = True # Automatically log the user in.

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

ROOT_URLCONF = 'track.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'track.wsgi.application'

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

FIXTURE_DIRS = (
    os.path.join(BASE_DIR, 'fixtures'),
)

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = 'media/'

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ],
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework_xml.parsers.XMLParser',
    ),
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework_xml.renderers.XMLRenderer',
    ),
}

DATABASES = {'default' : dj_database_url.config(default='postgres://testuser:testpw@localhost:5432/testdb')}

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

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

BOOTSTRAP3 = {
    'include_jquery': True,
}

【问题讨论】:

    标签: python django heroku django-staticfiles


    【解决方案1】:

    适合我的解决方案(24 小时后):

    1) 安装最新的稳定版本的 whitenoise(我正在使用一个旧示例,它需要 whitenoise==2.0.6)

    2) 确保向 MIDDLEWARE_CLASSES 添加白噪声:

    MIDDLEWARE_CLASSES = (
        'whitenoise.middleware.WhiteNoiseMiddleware',
    )
    

    注意:在使用 whitenoise==2.0.6 时将“whitenoise.middleware.WhiteNoiseMiddleware”添加到中间件类会引发错误。您需要升级到最新的稳定版本(当前为 whitenoise==3.1)

    【讨论】:

      【解决方案2】:

      我将假设这些管理文件来自 Django 管理应用程序。在没有看到您的项目的情况下,我对您接下来应该在哪里进行故障排除的最佳猜测是:

      1) 检查django.contrib.admin 是否在您的INSTALLED_APPS 中。

      2) 您要更改DEFAULT_FILE_STORAGE 设置吗?这可能会干扰STATICFILES_FINDERS

      3) 检查所有static files settings,如果您要覆盖其中任何一个,请确保没有任何警告。

      如果您发布整个 settings.py 文件,我会更好地调试您的问题。

      【讨论】:

      • 谢谢@miketheredherring,是的,管理文件来自 Django 管理应用程序。是的,django.contrib.admin 包含在 INSTALLED_APPS 中。我没有更改 DEFAULT_FILE_STORAGE。我已经添加了上面settings.py的内容。
      猜你喜欢
      • 2020-02-23
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      相关资源
      最近更新 更多