🔥 Hot Reload¶
В режиме разработки Raito сам перезагружает роутеры при изменении файлов. Это значит, что вы правите хендлеры и видите изменения сразу, без перезапуска.
Как это работает¶
Hot-reload включён по умолчанию, когда вы задаёте production=False:
raito = Raito(dispatcher, routers_dir="src/handlers", production=False)
- Во время
raito.setup()Raito: сканирует
routers_dirна предмет Python-файловпропускает файлы, начинающиеся с
_динамически импортирует все роутеры (с
router = Router(...))запускает watchdog через
watchfiles.awatchследит за изменениями файлов и перезагружает соответствующие роутеры
- Во время
Вручную вызывать
include_router()или разбираться с импортами не нужно
Пример¶
from aiogram import Router
from aiogram.types import Message
from aiogram.filters import Command
router = Router(name="debug")
@router.message(Command("debug"))
async def debug_handler(message: Message):
await message.answer("Hello, this is a live-reloading handler!")
Отредактируйте сообщение и сохраните файл: он перезагрузится автоматически.
Что происходит при изменении файла?¶
- Если
.py-файл изменён или создан: соответствующий роутер выгружается и загружается заново
- Если
- Если
.py-файл удалён: роутер снимается с регистрации
- Если
Каждый роутер однозначно отслеживается по Router.name.
Команды Raito в Telegram¶
Роутерами можно управлять и вручную из чата Telegram:
.rt routersпоказывает все зарегистрированные роутеры.rt unload <router_name>выгружает роутер по имени.rt load <router_name>загружает роутер по имени.rt reload <router_name>перезагружает существующий роутер
Ограничения¶
изменения в общих модулях (например,
utils/,models/) перезагрузку не вызываютперезагрузка затрагивает только файлы в
routers_dirесли у роутера есть побочные эффекты на верхнем уровне (например, запросы к БД), они могут выполниться дважды