Spaces:
Sleeping
Sleeping
Improve database initialization with better error handling and startup debugging
Browse files- app.py +17 -4
- app/database.py +25 -12
- app/main.py +8 -2
app.py
CHANGED
|
@@ -20,17 +20,30 @@ def main():
|
|
| 20 |
os.makedirs("app/static/images/dishes", exist_ok=True)
|
| 21 |
os.makedirs("templates", exist_ok=True)
|
| 22 |
|
| 23 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
source_db = "Tabble.db"
|
| 25 |
-
target_db = "Tabble.db" # Same location in Docker
|
| 26 |
|
| 27 |
try:
|
| 28 |
if os.path.exists(source_db):
|
| 29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
else:
|
| 31 |
print(f"⚠️ Database not found at {source_db}, will create new one")
|
| 32 |
except Exception as e:
|
| 33 |
-
print(f"⚠️ Database
|
| 34 |
|
| 35 |
# Set environment variables for Hugging Face Spaces
|
| 36 |
os.environ.setdefault("HUGGINGFACE_SPACES", "1")
|
|
|
|
| 20 |
os.makedirs("app/static/images/dishes", exist_ok=True)
|
| 21 |
os.makedirs("templates", exist_ok=True)
|
| 22 |
|
| 23 |
+
# Debug: Check current directory and files
|
| 24 |
+
import os
|
| 25 |
+
print(f"🔍 Current working directory: {os.getcwd()}")
|
| 26 |
+
print(f"🔍 Files in current directory: {os.listdir('.')}")
|
| 27 |
+
|
| 28 |
+
# Check for database file
|
| 29 |
+
db_files = [f for f in os.listdir('.') if f.endswith('.db')]
|
| 30 |
+
print(f"🔍 Database files found: {db_files}")
|
| 31 |
+
|
| 32 |
+
# Ensure database file is accessible
|
| 33 |
source_db = "Tabble.db"
|
|
|
|
| 34 |
|
| 35 |
try:
|
| 36 |
if os.path.exists(source_db):
|
| 37 |
+
size = os.path.getsize(source_db)
|
| 38 |
+
print(f"✅ Database found: {source_db} ({size} bytes)")
|
| 39 |
+
# Check if file is readable
|
| 40 |
+
with open(source_db, 'rb') as f:
|
| 41 |
+
f.read(16) # Try to read first 16 bytes
|
| 42 |
+
print(f"✅ Database file is readable")
|
| 43 |
else:
|
| 44 |
print(f"⚠️ Database not found at {source_db}, will create new one")
|
| 45 |
except Exception as e:
|
| 46 |
+
print(f"⚠️ Database file check error: {e}")
|
| 47 |
|
| 48 |
# Set environment variables for Hugging Face Spaces
|
| 49 |
os.environ.setdefault("HUGGINGFACE_SPACES", "1")
|
app/database.py
CHANGED
|
@@ -409,28 +409,41 @@ def get_current_database():
|
|
| 409 |
# Create tables
|
| 410 |
def create_tables():
|
| 411 |
try:
|
| 412 |
-
# Ensure database directory exists (current working directory)
|
| 413 |
-
import os
|
| 414 |
-
# We're already in /app in Docker, so just ensure file can be created
|
| 415 |
-
|
| 416 |
# Create all tables (only creates tables that don't exist)
|
| 417 |
Base.metadata.create_all(bind=engine)
|
| 418 |
print("Database tables created/verified successfully")
|
| 419 |
except Exception as e:
|
| 420 |
print(f"Error creating database tables: {e}")
|
| 421 |
-
|
|
|
|
| 422 |
try:
|
| 423 |
-
|
| 424 |
import sqlite3
|
| 425 |
-
|
| 426 |
-
|
| 427 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 428 |
# Try creating tables again
|
| 429 |
Base.metadata.create_all(bind=engine)
|
| 430 |
-
print("Database created successfully")
|
|
|
|
| 431 |
except Exception as creation_error:
|
| 432 |
-
print(f"Failed to create database: {creation_error}")
|
| 433 |
-
|
| 434 |
|
| 435 |
|
| 436 |
# Get database session (legacy)
|
|
|
|
| 409 |
# Create tables
|
| 410 |
def create_tables():
|
| 411 |
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 412 |
# Create all tables (only creates tables that don't exist)
|
| 413 |
Base.metadata.create_all(bind=engine)
|
| 414 |
print("Database tables created/verified successfully")
|
| 415 |
except Exception as e:
|
| 416 |
print(f"Error creating database tables: {e}")
|
| 417 |
+
print("Attempting to create new database with proper initialization...")
|
| 418 |
+
|
| 419 |
try:
|
| 420 |
+
# Create a new SQLite database file in the current directory
|
| 421 |
import sqlite3
|
| 422 |
+
import os
|
| 423 |
+
|
| 424 |
+
# Ensure we can write to the current directory
|
| 425 |
+
db_path = "Tabble.db"
|
| 426 |
+
|
| 427 |
+
# Create the database file with basic structure
|
| 428 |
+
conn = sqlite3.connect(db_path)
|
| 429 |
+
conn.execute("PRAGMA journal_mode=WAL;")
|
| 430 |
+
conn.execute("PRAGMA synchronous=NORMAL;")
|
| 431 |
+
conn.close()
|
| 432 |
+
|
| 433 |
+
print(f"Created new database file: {db_path}")
|
| 434 |
+
|
| 435 |
+
# Recreate engine with the new database
|
| 436 |
+
global engine
|
| 437 |
+
engine.dispose()
|
| 438 |
+
engine = create_engine(f"sqlite:///{db_path}", connect_args={"check_same_thread": False})
|
| 439 |
+
|
| 440 |
# Try creating tables again
|
| 441 |
Base.metadata.create_all(bind=engine)
|
| 442 |
+
print("Database tables created successfully in new database")
|
| 443 |
+
|
| 444 |
except Exception as creation_error:
|
| 445 |
+
print(f"Failed to create new database: {creation_error}")
|
| 446 |
+
print("Starting without database - some features may not work")
|
| 447 |
|
| 448 |
|
| 449 |
# Get database session (legacy)
|
app/main.py
CHANGED
|
@@ -43,8 +43,14 @@ app.include_router(table.router)
|
|
| 43 |
app.include_router(analytics.router)
|
| 44 |
app.include_router(settings.router)
|
| 45 |
|
| 46 |
-
#
|
| 47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
|
| 49 |
# Check if we have the React build folder
|
| 50 |
react_build_dir = "frontend/build"
|
|
|
|
| 43 |
app.include_router(analytics.router)
|
| 44 |
app.include_router(settings.router)
|
| 45 |
|
| 46 |
+
# Database initialization on startup
|
| 47 |
+
@app.on_event("startup")
|
| 48 |
+
async def startup_event():
|
| 49 |
+
"""Initialize database tables on application startup"""
|
| 50 |
+
try:
|
| 51 |
+
create_tables()
|
| 52 |
+
except Exception as e:
|
| 53 |
+
print(f"Warning: Database initialization failed: {e}")
|
| 54 |
|
| 55 |
# Check if we have the React build folder
|
| 56 |
react_build_dir = "frontend/build"
|