#35291: 500 Server error. Whitenoise Not Working when DEBUG = FALSE - Django -
Hosting Static Files
-------------------------------------+-------------------------------------
               Reporter:  Shihab     |          Owner:  (none)
  Khan                               |
                   Type:  Bug        |         Status:  assigned
              Component:             |        Version:  4.2
  Uncategorized                      |       Keywords:  500 Server error,
               Severity:  Normal     |  Whitenoise,  DEBUG = FALSE
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 I am running a Django website and it's about to go into production. I am
 now at the point where I need to set DEBUG = False in my settings.py file.
 I am getting the typical 500 errors because I have static files that are
 being hosted locally. I am working on getting Whitenoise to work to host
 my static files so I can move on with DEBUG = False. I have followed a lot
 of documentation and a lot of tutorials and think all of my configurations
 are all set but I am still getting the same error. When DEBUG = False I am
 still getting 500 errors on my production pages that have static files.
 Also when I inspect any static files on the page when DEBUG = True the URL
 has not changed at all. I am posting all of my configuration below in
 hopes that there is a simple mistake I made that I have been continuously
 skipped over but Whitenoise doesn't seem to be working and there seems to
 be no different from the way it was before now as Whitenoise is
 "implemented".
 I have run python manage.py collect static
 I have run pip install whitenoise
 I am new to white noise so I am just basing my knowledge on the tutorials
 and documentation I have found.


 settings.py

 {{{
 from pathlib import Path
 import os

 # Build paths inside the project like this: BASE_DIR / 'subdir'.
 BASE_DIR = Path(__file__).resolve().parent.parent

 def load_env():
     env_file = os.path.join(BASE_DIR, '.env')
     if os.path.exists(env_file):
         with open(env_file, 'r') as file:
             for line in file:
                 line = line.strip()
                 if line and not line.startswith("#"):
                     key, value = line.split('=')
                     os.environ[key] = value

 # Load environment variables from the .env file
 load_env()

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

 # SECURITY WARNING: keep the secret key used in production secret!
 SECRET_KEY = 'django-
 insecure-x=qe5@^3%@t1fk)pk@uyv&r!z^#9==^*-&aiqfau3@9x@+j%nm'

 # SECURITY WARNING: don't run with debug turned on in production!
 DEBUG = True if os.getenv('DEBUG') == 'True' else False

 ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS').split(',')


 # Application definition

 INSTALLED_APPS = [
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'accounts',
     'home',
     'about',
     'pricing',
     'blog',
     'contact',
     'service',
     'project',
     'settings',
     'legal',
     'menus',
     'adminapp',
     'marketing',
     'custompage',
     'ckeditor',
 ]

 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',
 ]

 if os.getenv('DEMO_MODE') == 'True':
     MIDDLEWARE.append('core.middleware.middleware.DemoModeMiddleware')

 if os.getenv("WHITENOISE_CONFIG") == "True":
     MIDDLEWARE.insert(1, 'whitenoise.middleware.WhiteNoiseMiddleware')


 ROOT_URLCONF = 'core.urls'

 TEMPLATES = [
     {
         'BACKEND': 'django.template.backends.django.DjangoTemplates',
         'DIRS': [os.path.join(BASE_DIR, os.getenv('TEMPLATES_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',
                 'core.context_processors.website_settings_context',
                 'core.context_processors.seo_settings_context',
                 'core.context_processors.header_footer_context',
                 'core.context_processors.menu_data',
                 'core.context_processors.user_profile_context',
                 'core.context_processors.service_context',
                 'core.context_processors.project_context',
                 'core.context_processors.demo_mode_enabled',
             ],
         },
     },
 ]

 WSGI_APPLICATION = 'core.wsgi.application'


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

 # First install my sql client using - pip install mysqlclient
 if os.getenv('MYSQL_DB') == 'True':
     DATABASES = {
         'default': {
             'ENGINE': 'django.db.backends.mysql',
             'NAME': os.getenv('DB_NAME'),
             'USER': os.getenv('DB_USER'),
             'PASSWORD': os.getenv('DB_PASSWORD'),
             'HOST': os.getenv('DB_HOST'),
             'PORT': os.getenv('DB_PORT'),
         }
     }
 else:
     DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.sqlite3',
         'NAME': BASE_DIR / 'db.sqlite3',
             }
     }
 # Email Setup
 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
 EMAIL_HOST = os.getenv('EMAIL_HOST')
 EMAIL_PORT = os.getenv('EMAIL_PORT')
 EMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')
 EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')
 EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')

 # Password validation
 # https://docs.djangoproject.com/en/4.2/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/4.2/topics/i18n/

 LANGUAGE_CODE = 'en-us'

 TIME_ZONE = os.getenv('TIME_ZONE')

 USE_I18N = True

 USE_TZ = True


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

 STATIC_URL = os.getenv('STATIC_URL')
 STATICFILES_DIRS = [os.path.join(BASE_DIR,
 str(os.getenv('STATICFILES_DIRS')))]
 STATIC_ROOT = os.path.join(BASE_DIR, str(os.getenv('STATIC_ROOT')))
 MEDIA_URL = str(os.getenv('MEDIA_URL'))
 MEDIA_ROOT = os.path.join(BASE_DIR, str(os.getenv('MEDIA_ROOT')))

 # Default primary key field type
 # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field

 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

 AUTH_USER_MODEL = 'accounts.User'

 # white noise settings
 if os.getenv('WHITENOISE_CONFIG') == 'True':
     STORAGES = {
          "default": {
         "BACKEND": "django.core.files.storage.FileSystemStorage",
     },
         "staticfiles": {
               "BACKEND":
 "whitenoise.storage.CompressedManifestStaticFilesStorage",
          },
     }
 }}}



 urls.py


 {{{
 from django.contrib import admin
 from django.urls import path ,include
 from django.conf import settings
 from django.conf.urls.static import static
 from django.views.generic import RedirectView
 from core.sitemaps import generate_sitemap
 from django.urls import re_path
 from django.views.static import serve

 urlpatterns = [
     path('oldadmin/', admin.site.urls),
     path('admin/' , RedirectView.as_view(pattern_name="adminHome"),
 name='adminRedirect'),
     path('dashboard/' , RedirectView.as_view(pattern_name="adminHome"),
 name='adminRedirect2'),
     path('', include('adminapp.urls')),
     path('', include('accounts.urls')),
     path('', include('home.urls')),
     path('', include('about.urls')),
     path('', include('pricing.urls')),
     path('', include('blog.urls')),
     path('', include('contact.urls')),
     path('', include('service.urls')),
     path('', include('project.urls')),
     path('', include('legal.urls')),
     path('', include('marketing.urls')),
     path('', include('custompage.urls')),
     path('sitemap.xml', generate_sitemap, name='generate_sitemap'),
 ]

 handler404 = 'accounts.views.error_404'
 handler404 = 'adminapp.views.error_404'
 handler404 = 'home.views.error_404'
 handler404 = 'service.views.error_404'
 handler404 = 'project.views.error_404'
 handler404 = 'contact.views.error_404'
 handler404 = 'about.views.error_404'
 handler404 = 'blog.views.error_404'
 handler404 = 'settings.views.error_404'
 handler404 = 'legal.views.error_404'

 handler500 = 'adminapp.views.error_500'

 urlpatterns += static(settings.MEDIA_URL,
 document_root=settings.MEDIA_ROOT)
 }}}
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35291>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018e31f59774-583d17b8-710f-4374-8c9b-6b24a43d1837-000000%40eu-central-1.amazonses.com.

Reply via email to