3.1 KiB
3.1 KiB
🚑 OKAMŽITÁ OPRAVA - Database Path Error
Problém
sqlite3.OperationalError: unable to open database file
⚡ Rychlé Řešení (30 sekund)
Varianta 1: Automatická oprava
cd ~/urio
python3 fix_db_path.py
python3 main.py
Varianta 2: Manuální oprava
cd ~/urio
# Přidej do main.py hned za class Config:
# Najdi tuto řádku (řádek ~33):
# SQLALCHEMY_DATABASE_URI = os.getenv("DATABASE_URL", "sqlite:///instance/transfer_stats.db")
#
# A nahraď ji tímto (3 řádky):
# BASE_DIR = os.path.abspath(os.path.dirname(__file__))
# INSTANCE_DIR = os.path.join(BASE_DIR, 'instance')
# SQLALCHEMY_DATABASE_URI = os.getenv("DATABASE_URL", f"sqlite:///{os.path.join(INSTANCE_DIR, 'transfer_stats.db')}")
Varianta 3: Použij opravený soubor
cd ~/urio
# Stáhni znovu main_enhanced.py z outputs/
# A přepiš jím současný main.py
mv main.py main.py.broken
cp /path/to/main_enhanced.py main.py
python3 main.py
🔍 Co je problém?
SQLAlchemy používá relativní cestu sqlite:///instance/transfer_stats.db, ale instance folder neexistuje v době, kdy se SQLAlchemy inicializuje.
✅ Co oprava dělá?
- Použije absolutní cestu místo relativní
- Vytvoří instance/ folder PŘED inicializací SQLAlchemy
- Nastaví správnou cestu k databázi
📝 Změny v kódu
PŘED (nefungující):
class Config:
SQLALCHEMY_DATABASE_URI = "sqlite:///instance/transfer_stats.db"
app = Flask(__name__)
app.config.from_object(Config)
# instance folder se vytváří tady ← TOO LATE!
PO (fungující):
class Config:
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
INSTANCE_DIR = os.path.join(BASE_DIR, 'instance')
SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join(INSTANCE_DIR, 'transfer_stats.db')}"
# instance folder se vytváří tady ← BEFORE app init!
if not os.path.exists(Config.INSTANCE_DIR):
os.makedirs(Config.INSTANCE_DIR)
app = Flask(__name__)
app.config.from_object(Config)
🎯 Ověření
Po opravě by měl výstup vypadat takto:
$ python3 main.py
2025-11-21 12:20:51,319 - INFO - Successfully loaded world map GeoJSON data.
2025-11-21 12:20:51,450 - INFO - Scheduler started
* Serving Flask app 'main'
* Running on http://0.0.0.0:90
✅ Bez chyby "unable to open database file"!
🆘 Stále nefunguje?
Zkontroluj:
# 1. Existuje instance složka?
ls -la instance/
# 2. Jsou v ní správné soubory?
ls -la instance/transfer_stats.db*
# 3. Má Python práva na zápis?
touch instance/test.txt && rm instance/test.txt
# 4. Je databáze validní?
sqlite3 instance/transfer_stats.db ".tables"
Pokud všechno OK, měl by výstup být:
accounts settings stats webhook
📦 Aktualizované soubory
Všechny soubory v /mnt/user-data/outputs/ jsou již opravené:
- ✅ main_enhanced.py - Opravená verze
- ✅ fix_db_path.py - Automatický fix skript
- ✅ migrate.py - Funguje s instance/
Stačí je použít a vše bude fungovat!
Vyřešilo to problém? Dej mi vědět! 🚀