简体   繁体   English

您正在使用 staticfiles 应用程序,而没有将 STATIC_ROOT 设置设置为文件系统路径

[英]You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path

I have gone through every other answer and cannot seem to get anything to work for me.我已经完成了所有其他答案,但似乎无法为我工作。 I am following a tutorial and trying to push my master branch to heroku and get the error You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path .我正在按照教程尝试将我的master分支推送到 heroku 并收到错误You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path I am using Django 2.0 and python 3.6.3.我正在使用 Django 2.0 和 python 3.6.3。 The full traceback:完整的追溯:

remote: -----> $ python manage.py collectstatic --noinput
remote:        Traceback (most recent call last):
remote:          File "manage.py", line 15, in <module>
remote:            execute_from_command_line(sys.argv)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
remote:            utility.execute()
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 365, in execute
remote:            self.fetch_command(subcommand).run_from_argv(self.argv)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 288, in run_from_argv
remote:            self.execute(*args, **cmd_options)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 335, in execute
remote:            output = self.handle(*args, **options)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 189, in handle
remote:            collected = self.collect()
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 114, in collect
remote:            handler(path, prefixed_path, storage)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 344, in copy_file
remote:            if not self.delete_file(path, prefixed_path, source_storage):
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 250, in delete_file
remote:            if self.storage.exists(prefixed_path):
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/core/files/storage.py", line 308, in exists
remote:            return os.path.exists(self.path(name))
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/staticfiles/storage.py", line 43, in path
remote:            raise ImproperlyConfigured("You're using the staticfiles app "
remote:        django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
remote: 
remote:  !     Error while running '$ python manage.py collectstatic --noinput'.
remote:        See traceback above for details.
remote: 
remote:        You may need to update application code to resolve this error.
remote:        Or, you can disable collectstatic for this application:
remote: 
remote:           $ heroku config:set DISABLE_COLLECTSTATIC=1
remote: 
remote:        https://devcenter.heroku.com/articles/django-assets
remote:  !     Push rejected, failed to compile Python app.
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !   Push rejected to obscure-spire-97107.
remote: 
To https://git.heroku.com/obscure-spire-97107.git
 ! [remote rejected] master -> master (pre-receive hook declined)

My settings.py我的settings.py

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '5af%uw_wn*o#v$gp!dj1yrxf0#z+4_+&4$3f^kjh*fc7+ec4*9'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    #added apps for project, my_apps
    'blog',
    'users',

    #third party apps
    'bootstrap3',

]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    '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',
]

ROOT_URLCONF = 'book_project.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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 = 'book_project.wsgi.application'


# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

STATIC_URL = '/static/'

#My settings
LOGIN_URL = 'users/login/'

#settings bootstrap3
BOOTSTRAP3 = {
    'include_jquery':True,
}

#Heroku settings
# ROOT_PATH = os.path.dirname(__file__)
if os.getcwd() == '/app':
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config(default='postgres://localhost')
    }

    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

    ALLOWED_HOSTS = ['*']

    BASE_DIR = os.path.dirname(os.path.abspath(__file__)),
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )

I tried getting rid of the if statement to see if that was the problem but no luck.我试着去掉if语句,看看是不是问题所在,但没有成功。 Looking for any advice.寻找任何建议。

I was able to make this work by getting rid of the if statement all together and just having the following in my settings.py .我能够通过一起摆脱if语句并在我的settings.py中包含以下内容来完成这项工作。

import dj_database_url
DATABASES = {
    'default': dj_database_url.config(default='postgres://localhost')
}

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

ALLOWED_HOSTS = ['*']

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

Summarizing ratrace's answer, the main solution is to add总结一下ratrace的回答,主要的解决办法是加上

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

to settings.py .settings.py Where STATIC_ROOT is the destination to where static files are copied and from where they are served when deploying the Django app.其中STATIC_ROOT是在部署 Django 应用程序时复制静态文件的目标和提供它们的目标。

On this website it says to add this url pattern to your project:这个网站上,它说要将此 url 模式添加到您的项目中:

urlpatterns += patterns(”, (r’^static/(?P.*)$’, ‘django.views.static.serve’, {‘document_root’: settings.STATIC_ROOT}),)

I haven't used heroku before but IF I understand correctly, it needs a path to send all the collected static files to.我以前没有使用过 heroku,但如果我理解正确,它需要一个路径来将所有收集的静态文件发送到。 Usually that's in the server's settings.通常这是在服务器的设置中。 But the website above mentions that heroku uses an app which doesn't support static files deployment, and that's why you need a url pattern to make it get the static files from their respective places.但是上面的网站提到heroku使用了一个不支持静态文件部署的应用程序,这就是为什么你需要一个url模式来让它从各自的位置获取静态文件。

Also, read the entire tutorial first.另外,请先阅读整个教程。 They might mention your problem somewhere near the end of the tutorial in like a Notes section.他们可能会在接近本教程末尾的某个地方提到您的问题,例如“注释”部分。 Read the comments also if they exist.如果存在,也请阅读评论。

I solve this in three step: 1== import os 2== STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 3== python manage.py collectstatic我分三步解决这个问题: 1== import os 2== STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 3== python manage.py collectstatic

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 配置不当:您使用的是staticfiles应用,而未将STATIC_ROOT设置设置为文件系统路径 - ImproperlyConfigured:You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path Python Django:您使用的是静态文件应用程序,而没有将 STATIC_ROOT 设置设置为文件系统路径 - Python Django: You're using the staticfiles app without having set the STATIC_ROOT setting setting to a filesystem path django.core.exceptions.ImproperlyConfigured:您使用的是静态文件应用程序,而没有将 STATIC_ROOT 设置设置为文件系统路径 - django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path Python Django:您正在使用 staticfiles 应用程序,而没有设置 STATIC_ROOT 设置 - Python Django: You're using the staticfiles app without having set the STATIC_ROOT setting 您正在使用 staticfiles 应用程序,但没有设置所需的 STATIC_URL 设置 - Django - You're using the staticfiles app without having set the required STATIC_URL setting - Django Django 中的 STATIC_ROOT 设置 - STATIC_ROOT setting in Django 在 Django 中使用 heroku 时出现 STATIC_ROOT 错误 - Having an Error with STATIC_ROOT when using heroku in Django 使用静态根路径django的heroku deploy错误。 static_root未设置为文件系统路径 - heroku deploy error with static root path django. static_root not set to file system path STATICFILES_DIR、STATIC_ROOT 和 MEDIA_ROOT 的区别 - Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT 在Django中更改STATIC_ROOT和STATICFILES_DIRS后不会加载静态文件 - Static files aren't loading after changing STATIC_ROOT and STATICFILES_DIRS in django
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM