title: django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path
body: <p><a href="https://i.stack.imgur.com/w2Iu8.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/w2Iu8.png" alt="enter image description here"></a><a href="https://i.stack.imgur.com/HnxuK.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/HnxuK.png" alt="staticfiles"></a>when i run git push heroku master it says that my STATIC_ROOT is improperly configured (ERROR:raise ImproperlyConfigured("You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path".). I have set my STATIC_ROOT just as shown in a video tutuorial.</p>
  
  <blockquote>
    <p>settings.py</p>
  </blockquote>
  
  <pre><code>import django_heroku
  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__)))
  
  
  # SECURITY WARNING: keep the secret key used in production secret!
  SECRET_KEY = '###############################'
  
  # SECURITY WARNING: don't run with debug turned on in production!
  DEBUG = (os.environ.get('DEBUG_VALUE') == 'True')
  
  
  ALLOWED_HOSTS = ['http://mypytalk.herokuapp.com/']
  
  # Application definition
  
  INSTALLED_APPS = [
      'blog.apps.BlogConfig',
      'users.apps.UsersConfig',
      'crispy_forms',
      'django.contrib.admin',
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',
      'storages'
  ]
  
  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 = 'pytalk.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 = 'pytalk.wsgi.application'
  
  # Database
  # https://docs.djangoproject.com/en/2.1/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.1/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.1/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.1/howto/static-files/
  
  STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
  STATIC_URL = '/static/'
  
  
  MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  MEDIA_URL = '/media/'
  
  CRISPY_TEMPLATE_PACK = 'bootstrap4'
  
  LOGIN_REDIRECT_URL = 'blog-home'
  LOGIN_URL = 'login'
  
  EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
  EMAIL_HOST = 'smtp.gmail.com'
  EMAIL_PORT = 587
  EMAIL_USE_TLS = True
  EMAIL_HOST_USER = os.environ.get('EMAIL_USER')
  EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASS')
  
  DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
  
  # Activate Django-Heroku.
  django_heroku.settings(locals())
  </code></pre>
  
  <p>.gitignore</p>
  
  <pre><code># Byte-compiled / optimized / DLL files
  __pycache__/
  *.py[cod]
  *$py.class
  
  # C extensions
  *.so
  
  # Distribution / packaging
  .Python
  build/
  develop-eggs/
  dist/
  downloads/
  eggs/
  .eggs/
  lib/
  lib64/
  parts/
  sdist/
  var/
  wheels/
  &lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
  =======
  pip-wheel-metadata/
  &gt;&gt;&gt;&gt;&gt;&gt;&gt; 661353800061e4584535573f7e8b813cb01040c2
  share/python-wheels/
  *.egg-info/
  .installed.cfg
  *.egg
  MANIFEST
  
  # PyInstaller
  #  Usually these files are written by a python script from a template
  #  before PyInstaller builds the exe, so as to inject date/other infos into it.
  *.manifest
  *.spec
  
  # Installer logs
  pip-log.txt
  pip-delete-this-directory.txt
  
  # Unit test / coverage reports
  htmlcov/
  .tox/
  .nox/
  .coverage
  .coverage.*
  .cache
  nosetests.xml
  coverage.xml
  *.cover
  *.py,cover
  .hypothesis/
  .pytest_cache/
  &lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
  cover/
  =======
  &gt;&gt;&gt;&gt;&gt;&gt;&gt; 661353800061e4584535573f7e8b813cb01040c2
  
  # Translations
  *.mo
  *.pot
  
  # Django stuff:
  *.log
  local_settings.py
  db.sqlite3
  db.sqlite3-journal
  
  # Flask stuff:
  instance/
  .webassets-cache
  
  # Scrapy stuff:
  .scrapy
  
  # Sphinx documentation
  docs/_build/
  
  # PyBuilder
  &lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
  .pybuilder/
  =======
  &gt;&gt;&gt;&gt;&gt;&gt;&gt; 661353800061e4584535573f7e8b813cb01040c2
  target/
  
  # Jupyter Notebook
  .ipynb_checkpoints
  
  # IPython
  profile_default/
  ipython_config.py
  
  # pyenv
  &lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
  #   For a library or package, you might want to ignore these files since the code is
  #   intended to run in multiple environments; otherwise, check them in:
  # .python-version
  =======
  .python-version
  &gt;&gt;&gt;&gt;&gt;&gt;&gt; 661353800061e4584535573f7e8b813cb01040c2
  
  # pipenv
  #   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
  #   However, in case of collaboration, if having platform-specific dependencies or dependencies
  #   having no cross-platform support, pipenv may install dependencies that don't work, or not
  #   install all needed dependencies.
  #Pipfile.lock
  
  # PEP 582; used by e.g. github.com/David-OConnor/pyflow
  __pypackages__/
  
  # Celery stuff
  celerybeat-schedule
  celerybeat.pid
  
  # SageMath parsed files
  *.sage.py
  
  # Environments
  .env
  .venv
  env/
  venv/
  ENV/
  env.bak/
  venv.bak/
  
  # Spyder project settings
  .spyderproject
  .spyproject
  
  # Rope project settings
  .ropeproject
  
  # mkdocs documentation
  /site
  
  # mypy
  .mypy_cache/
  .dmypy.json
  dmypy.json
  
  # Pyre type checker
  .pyre/
  &lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
  
  # pytype static type analyzer
  .pytype/
  
  # Cython debug symbols
  cython_debug/
  
  /.idea/
  .idea/workspace.xml
  =======
  &gt;&gt;&gt;&gt;&gt;&gt;&gt; 661353800061e4584535573f7e8b813cb01040c2
  </code></pre>