Идея заключалась в том, чтобы сгенерировать миграцию на моем локальном компьютере, сравнив ее с последней сгенерированной версией, а затем развернуть ее так, чтобы все базы данных арендаторов обновлялись правильно. Однако я не могу поддерживать общую схему для сравнения.
Можно ли сделать это без создания общедоступного экземпляра контроля?
Раздел моего кода, отвечающий за выполнение миграции, показан ниже. Первоначальная миграция прошла отлично, но теперь я сталкиваюсь с ошибкой при попытке создать новую миграцию, поскольку получаю сообщение:
ОШИБКА [alembic.util.messaging] Целевая база данных не обновлена. ОШИБКА: целевая база данных устарела.
def run_migrations_online():
import sys
is_generating = any(cmd in sys.argv for cmd in ["revision"])
if is_generating:
from sqlalchemy import create_engine
connectable = create_engine("sqlite:///:memory:")
with connectable.connect() as connection:
context.configure(
connection=connection,
target_metadata=target_metadata,
compare_type=True,
compare_server_default=True,
render_as_batch=False,
)
with context.begin_transaction():
context.run_migrations()
return
tenants = tenant_config_manager.list_all_tenants()
if not tenants:
return
success_count = 0
error_count = 0
for tenant_id in tenants:
try:
db_url = tenant_config_manager.get_database_url(tenant_id)
if not db_url:
error_count += 1
continue
from sqlalchemy import create_engine
connectable = create_engine(
db_url,
poolclass=pool.NullPool,
)
with connectable.connect() as connection:
context.configure(
connection=connection,
target_metadata=target_metadata,
version_table=f"alembic_version",
compare_type=True,
compare_server_default=True,
)
with context.begin_transaction():
context.run_migrations()
success_count += 1
except Exception as e:
error_count += 1
if error_count > 0:
logger.warning(f"
Подробнее здесь: https://stackoverflow.com/questions/798 ... tenant-aws
Мобильная версия