CPanel+Passenger部署Django生产环境:仅根路由可用,其余路由返回500内部服务器错误求助
CPanel+Passenger部署Django生产环境:仅根路由可用,其余路由返回500内部服务器错误求助
我现在碰到个头疼的问题:本地跑完全正常的Django项目,部署到CPanel用Passenger做WSGI服务后,只有根路由/能正常访问,其他所有路由(哪怕是最简单的测试路由)都返回500内部服务器错误,实在找不到问题出在哪,求帮忙看看!
注:哪怕是我加的极简测试路由,在生产环境也报500,本地却完全正常:path('test/', lambda request: HttpResponse('Test route works!'))
主项目urls.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的urls.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") import django django.setup() # Importar o WSGI application from django.core.wsgi import get_wsgi_application application = get_wsgi_application() except Exception as e: logging.error(f"Erro ao configurar Passenger WSGI: {str(e)}") logging.error(traceback.format_exc()) raise
备注:内容来源于stack exchange,提问作者valdimiro einstein
相关产品推荐
相关产品推荐

