Compare commits

..

7 Commits

7 changed files with 30 additions and 5 deletions
+3
View File
@@ -5,6 +5,9 @@ WORKDIR /app
# Bricktracker # Bricktracker
COPY . . COPY . .
# Fix line endings and set executable permissions for entrypoint script
RUN sed -i 's/\r$//' entrypoint.sh && chmod +x entrypoint.sh
# Python library requirements # Python library requirements
RUN pip --no-cache-dir install -r requirements.txt RUN pip --no-cache-dir install -r requirements.txt
+2 -2
View File
@@ -1,6 +1,6 @@
# This need to be first # This need to be first
import eventlet import gevent.monkey
eventlet.monkey_patch() gevent.monkey.patch_all()
import logging # noqa: E402 import logging # noqa: E402
+1 -1
View File
@@ -70,7 +70,7 @@ class BrickSocket(object):
*args, *args,
**kwargs, **kwargs,
path=app.config['SOCKET_PATH'], path=app.config['SOCKET_PATH'],
async_mode='eventlet', async_mode='gevent',
) )
# Store the socket in the app config # Store the socket in the app config
+4 -1
View File
@@ -25,6 +25,7 @@ def update() -> Response:
BrickSet(), BrickSet(),
minifigure=BrickMinifigure(record={ minifigure=BrickMinifigure(record={
'set_img_url': None, 'set_img_url': None,
'image': None,
}) })
).download() ).download()
@@ -33,7 +34,9 @@ def update() -> Response:
BrickSet(), BrickSet(),
part=BrickPart(record={ part=BrickPart(record={
'part_img_url': None, 'part_img_url': None,
'part_img_url_id': None 'part_img_url_id': None,
'image_id': None,
'image': None,
}) })
).download() ).download()
+1 -1
View File
@@ -13,4 +13,4 @@ then
fi fi
# Execute the WSGI server # Execute the WSGI server
gunicorn --bind "${BK_SERVER}:${BK_PORT}" "app:create_app()" --worker-class "eventlet" "$@" gunicorn --bind "${BK_HOST}:${BK_PORT}" "wsgi:application" --worker-class "gevent" --workers 1 "$@"
+1
View File
@@ -2,6 +2,7 @@ eventlet
flask flask
flask_socketio flask_socketio
flask-login flask-login
gevent
gunicorn gunicorn
humanize humanize
jinja2 jinja2
+18
View File
@@ -0,0 +1,18 @@
#!/usr/bin/env python3
"""
WSGI entry point for BrickTracker - Production Docker deployment
This ensures proper gevent monkey patching before any imports
"""
# CRITICAL: Monkey patch must be first, before ANY other imports
import gevent.monkey
gevent.monkey.patch_all()
# Now import the regular app factory
from app import create_app
# Create the application - this will be a BrickSocket instance
app_instance = create_app()
# For gunicorn, we need the Flask app, not the BrickSocket wrapper
application = app_instance.app if hasattr(app_instance, 'app') else app_instance