103 lines
No EOL
3.2 KiB
Python
103 lines
No EOL
3.2 KiB
Python
import os
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
|
|
# GPT-5 fix: Monkey patch BEFORE any other imports that might use threads/sockets
|
|
try:
|
|
import eventlet
|
|
eventlet.monkey_patch()
|
|
print("✅ GPT-5 FIX: Early eventlet monkey patching applied")
|
|
except ImportError:
|
|
print("⚠️ Eventlet not available for early monkey patching")
|
|
|
|
# Set up temp directories FIRST, before any imports that might use temp files
|
|
def setup_early_temp_directories():
|
|
"""Set up temp directories before Flask imports."""
|
|
backend_dir = os.path.dirname(os.path.abspath(__file__))
|
|
temp_dir = os.path.join(backend_dir, 'temp')
|
|
|
|
try:
|
|
os.makedirs(temp_dir, exist_ok=True)
|
|
os.chmod(temp_dir, 0o755)
|
|
|
|
# Test write permissions
|
|
test_file = os.path.join(temp_dir, 'test_write_early')
|
|
with open(test_file, 'w') as f:
|
|
f.write('test')
|
|
os.remove(test_file)
|
|
|
|
# Set environment variables BEFORE any imports that use tempfile
|
|
os.environ['TMPDIR'] = temp_dir
|
|
os.environ['TEMP'] = temp_dir
|
|
os.environ['TMP'] = temp_dir
|
|
tempfile.tempdir = temp_dir
|
|
|
|
print(f"✓ Early temp directory setup: {temp_dir}")
|
|
return temp_dir
|
|
except Exception as e:
|
|
print(f"Warning: Early temp directory setup failed: {e}")
|
|
return None
|
|
|
|
# Set up temp directories before importing app
|
|
setup_early_temp_directories()
|
|
|
|
from app import create_app
|
|
from app.models.user import User
|
|
|
|
# Create the Flask app
|
|
flask_app = create_app()
|
|
|
|
# Initialize database on startup
|
|
def initialize_database():
|
|
# Create default user if it doesn't exist
|
|
User.create_default_user()
|
|
|
|
# Call initialization immediately
|
|
with flask_app.app_context():
|
|
initialize_database()
|
|
|
|
# For SocketIO, we need to use the socketio app directly
|
|
app = flask_app
|
|
|
|
if __name__ == '__main__':
|
|
# Check if we have SocketIO support and run with eventlet
|
|
try:
|
|
import eventlet
|
|
print("Starting Flask-SocketIO app with eventlet...")
|
|
print("Started Semblance back end service")
|
|
|
|
# Run with SocketIO support - use the socketio instance to run the app
|
|
flask_app.socketio.run(
|
|
flask_app,
|
|
host='0.0.0.0',
|
|
port=5137,
|
|
debug=False,
|
|
use_reloader=False,
|
|
allow_unsafe_werkzeug=True
|
|
)
|
|
|
|
except ImportError as e:
|
|
print("Eventlet not found. Installing it...")
|
|
subprocess.check_call([sys.executable, "-m", "pip", "install", "eventlet", "flask-socketio"])
|
|
|
|
# Try again
|
|
try:
|
|
import eventlet
|
|
print("Started Semblance back end service")
|
|
flask_app.socketio.run(
|
|
flask_app,
|
|
host='0.0.0.0',
|
|
port=5137,
|
|
debug=False,
|
|
use_reloader=False,
|
|
allow_unsafe_werkzeug=True
|
|
)
|
|
except Exception as e:
|
|
print(f"Failed to start with SocketIO: {e}")
|
|
print("Falling back to regular Flask...")
|
|
print("Started Semblance back end service")
|
|
flask_app.run(host='0.0.0.0', port=5137, debug=False)
|
|
except KeyboardInterrupt:
|
|
print("\nShutting down...")
|
|
sys.exit(0) |