129 lines
3.1 KiB
Markdown
129 lines
3.1 KiB
Markdown
# 🚑 OKAMŽITÁ OPRAVA - Database Path Error
|
|
|
|
## Problém
|
|
```
|
|
sqlite3.OperationalError: unable to open database file
|
|
```
|
|
|
|
## ⚡ Rychlé Řešení (30 sekund)
|
|
|
|
### Varianta 1: Automatická oprava
|
|
```bash
|
|
cd ~/urio
|
|
python3 fix_db_path.py
|
|
python3 main.py
|
|
```
|
|
|
|
### Varianta 2: Manuální oprava
|
|
```bash
|
|
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
|
|
```bash
|
|
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á?
|
|
|
|
1. **Použije absolutní cestu** místo relativní
|
|
2. **Vytvoří instance/ folder** PŘED inicializací SQLAlchemy
|
|
3. **Nastaví správnou cestu** k databázi
|
|
|
|
## 📝 Změny v kódu
|
|
|
|
### PŘED (nefungující):
|
|
```python
|
|
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í):
|
|
```python
|
|
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:
|
|
```bash
|
|
$ 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:
|
|
|
|
```bash
|
|
# 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!** 🚀
|