Enhance Ticket management functionalities
This commit is contained in:
+41
-24
@@ -1,36 +1,53 @@
|
||||
# gunicorn.conf.py
|
||||
import multiprocessing
|
||||
|
||||
# Server socket
|
||||
bind = "127.0.0.1:7000"
|
||||
backlog = 2048
|
||||
bind = "127.0.0.1:7000" # match your nginx proxy_pass port
|
||||
backlog = 2048
|
||||
|
||||
# Worker processes
|
||||
worker_class = "eventlet" # Required for Flask-SocketIO
|
||||
workers = 1 # eventlet requires exactly 1 worker
|
||||
worker_connections = 1000
|
||||
timeout = 120
|
||||
keepalive = 5
|
||||
# Worker — eventlet requires exactly 1 worker process.
|
||||
# Concurrency is handled by eventlet's cooperative green-thread pool.
|
||||
worker_class = "eventlet"
|
||||
workers = 1
|
||||
worker_connections= 2000
|
||||
timeout = 300
|
||||
keepalive = 75
|
||||
|
||||
# Preloading ensures eventlet.monkey_patch() in run.py runs once before fork
|
||||
preload_app = True
|
||||
|
||||
# Application
|
||||
module = "run:app"
|
||||
wsgi_app = "run:app"
|
||||
|
||||
# Logging
|
||||
accesslog = "logs/gunicorn_access.log"
|
||||
errorlog = "logs/gunicorn_error.log"
|
||||
loglevel = "info"
|
||||
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" %(D)sµs'
|
||||
accesslog = "logs/gunicorn_access.log"
|
||||
errorlog = "logs/gunicorn_error.log"
|
||||
loglevel = "warning" # suppress routine socket close noise
|
||||
capture_output = False # don't capture eventlet's stderr Errno 9 messages
|
||||
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(a)s" %(D)sµs'
|
||||
|
||||
# Process naming
|
||||
proc_name = "it_ticket_system"
|
||||
proc_name = "it_ticket_system"
|
||||
daemon = False
|
||||
pidfile = "/tmp/it_tickets.pid"
|
||||
|
||||
# Server mechanics
|
||||
daemon = False
|
||||
pidfile = "/tmp/it_tickets.pid"
|
||||
user = None # Set to your app user, e.g. "www-data"
|
||||
group = None
|
||||
tmp_upload_dir = None
|
||||
|
||||
# SSL (configure if not using nginx for SSL termination)
|
||||
# keyfile = "/etc/ssl/private/your.key"
|
||||
# certfile = "/etc/ssl/certs/your.crt"
|
||||
def post_fork(server, worker):
|
||||
"""Called after a worker is forked. Patch eventlet per-worker."""
|
||||
import eventlet
|
||||
eventlet.monkey_patch()
|
||||
|
||||
|
||||
def worker_exit(server, worker):
|
||||
"""
|
||||
Called when a worker exits. Cleanly close any remaining eventlet sockets
|
||||
to prevent [Errno 9] Bad file descriptor errors in the logs.
|
||||
These errors are benign (connections recover automatically) but noisy.
|
||||
"""
|
||||
try:
|
||||
import eventlet.greenio
|
||||
# Hub cleanup — tells eventlet to stop watching all open file descriptors
|
||||
hub = eventlet.hubs.get_hub()
|
||||
if hasattr(hub, 'abort'):
|
||||
hub.abort(wait=False)
|
||||
except Exception:
|
||||
pass
|
||||
Reference in New Issue
Block a user