Reputation: 107
I’m facing an issue with my Django application running in production on CPanel, and I'm using Passenger for WSGI. The application works fine on the local machine but on the live server it only works the root route (/), but all other routes return a 500 - Internal Server Error. I haven’t been able to pinpoint what’s causing the issue.
Note: even a teste route like this returns the error 500 on live server: path('test/', lambda request: HttpResponse('Test route works!')),
Main URL.py
from django.urls import include, path
from django.http import HttpResponse
urlpatterns = [
path('', include('accommodation.urls')),
path('test/', lambda request: HttpResponse('Test route works!')),#This works only on local machine
]
Accommodation URL.py
from django.urls import path
from .views.dashboard_view import dashboard
from .views.booking_view import newBooking,manageBooking,walk_in,walk_in_checkin,check_out,book_workspace,book_room,check_in,booking_requests,get_booking_request_details,delete_booking_request,workspace,check_bed_availability
from .views.guest_view import new_client,new_guest,manageClient,manageGuest,update_guest,delete_guest
from .views.room_view import roomList,room_and_bed_availability,roomMaintenance,stayView,stay_data,dirtyRoom,clean_bed
from .views.settings_view import add_site,manageSite,roomCategory,addRoomCategory,editRoomCategory,bedManagement,addBed,roomManagment, workspaceManagment
from .views.finance_view import Debits,payments,mark_as_paid,completedPayments,rates,processReport,costCenter
from .views.incidents_medical import incidents,medical_cases,add_incident,add_case
from .views.reports_view import generate,generate_report
from .views.miscellaneous_view import meals,vehicleRent
urlpatterns = [
# Dashboard Routes
path('', dashboard, name='accommodation_dashboard'), #only this works on live server
#Booking Routes
path('new_booking/', newBooking, name='new_booking'),
path('new_booking/book/', book_room, name='book_room'),
path('manage_booking/', manageBooking, name='manage_booking'),
path('manage_booking/check_in/<int:booking_id>/', check_in, name='check_in'),
path('online_request/', booking_requests, name='online_request'),
path('online_request/<int:booking_id>/', get_booking_request_details, name='get_booking_request_details'),
path('online_request/check_bed_availability/<int:bed_id>/<str:checkin_date>/<str:checkout_date>/', check_bed_availability, name='check_bed_availability'),
path('delete_booking_request/<int:booking_id>/', delete_booking_request, name='delete_booking'),
path('booking/workspace', workspace, name='workspace'),
#Check-in Routes
path('check_in/', walk_in, name='check_in'),
path('check_in_checkin/', walk_in_checkin, name='check_in_checkin'),
path('check_out/', check_out, name='check_out'),
]
Settings.py
import os, random, string
from pathlib import Path
from dotenv import load_dotenv
from str2bool import str2bool
load_dotenv() # take environment variables from .env.
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.environ.get('SECRET_KEY')
if not SECRET_KEY:
SECRET_KEY = ''.join(random.choice(string.ascii_lowercase) for i in range(32))
# Enable/Disable DEBUG Mode
DEBUG = str2bool(os.environ.get('DEBUG'))
# DEBUG = False
#print(' DEBUG -> ' + str(DEBUG) )
ALLOWED_HOSTS = [
'accommodation.mydomain.za',
'www.accommodation.mydomain.za',
'mydomain.za',
'www.mydomain.za',
'127.0.0.1',
'mail.mydomain.za', # Adicione este host
]
# Add here your deployment HOSTS
CSRF_TRUSTED_ORIGINS = [
'http://mydomain.za',
'https://mydomain.za',
'http://accommodation.mydomain.za',
'https://accommodation.mydomain.za',
'http://mail.mydomain.za',
'https://mail.mydomain.za',
'http://localhost:8000',
'http://localhost:5085',
'http://127.0.0.1:8000',
'http://127.0.0.1:5085',
]
RENDER_EXTERNAL_HOSTNAME = os.environ.get('RENDER_EXTERNAL_HOSTNAME')
if RENDER_EXTERNAL_HOSTNAME:
ALLOWED_HOSTS.append(RENDER_EXTERNAL_HOSTNAME)
# Application definition
INSTALLED_APPS = [
'admin_material.apps.AdminMaterialDashboardConfig',
# "django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"home",
'accommodation',
'django_extensions',
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
"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",
'accommodation.middleware.DisableAuthenticationMiddleware',
]
ROOT_URLCONF = "core.urls"
UI_TEMPLATES = os.path.join(BASE_DIR, 'templates')
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [UI_TEMPLATES], # Diretório global de templates
"APP_DIRS": True, # Permite que o Django busque templates dentro de cada app
"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 = "core.wsgi.application"
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DB_ENGINE = os.getenv('DB_ENGINE', None)
DB_USERNAME = os.getenv('DB_USERNAME', None)
DB_PASS = os.getenv('DB_PASS', None)
DB_HOST = os.getenv('DB_HOST', None)
DB_PORT = os.getenv('DB_PORT', None)
DB_NAME = os.getenv('DB_NAME', None)
if DB_ENGINE and DB_NAME and DB_USERNAME:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.' + DB_ENGINE,
'NAME': DB_NAME,
'USER': DB_USERNAME,
'PASSWORD': DB_PASS,
'HOST': DB_HOST,
'PORT': DB_PORT,
'OPTIONS': {
'options': '-c search_path=accom'
}
},
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'db.sqlite3',
}
}
# Password validation
# https://docs.djangoproject.com/en/4.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/4.1/topics/i18n/
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/
STATIC_URL = '/accommodation/static/'
#STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
#if not DEBUG:
# STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
#STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
# Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
#LOGIN_URL = '/accommodation/' # Define a URL de login padrão
#LOGIN_REDIRECT_URL = '/accommodation/'
#LOGOUT_REDIRECT_URL = '/accommodation/' # Redireciona após logout
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'ERROR',
'class': 'logging.FileHandler',
'filename': os.path.join(BASE_DIR, 'django_error.log'),
'formatter': 'verbose',
},
},
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message} {exc_info}',
'style': '{',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'ERROR',
'propagate': True,
},
},
}
passenger_wsgi.py
import sys
import os
import logging
import traceback
# Configuração de log
logging.basicConfig(
level=logging.ERROR,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename='/home/myuser/public_html/accommodation/wsgi_error.log'
)
try:
# Adicionar projeto ao path
sys.path.insert(0, '/home/myuser/public_html/accommodation')
# Configurar Django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
except Exception as e:
# Log detalhado de qualquer erro de configuração
logging.error("WSGI Setup Error:")
logging.error(traceback.format_exc())
raise
Upvotes: 0
Views: 67