aerich icon indicating copy to clipboard operation
aerich copied to clipboard

can't migrate, I need help

Open kkv0id opened this issue 4 years ago • 20 comments

I can't understand these error outputs

$ poetry run aerich migrate

Traceback (most recent call last):
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/bin/aerich", line 8, in <module>
    sys.exit(main())
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aerich/cli.py", line 258, in main
    cli()
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/click/core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/click/decorators.py", line 26, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aerich/cli.py", line 33, in wrapper
    loop.run_until_complete(f(*args, **kwargs))
  File "uvloop/loop.pyx", line 1501, in uvloop.loop.Loop.run_until_complete
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aerich/cli.py", line 91, in migrate
    ret = await command.migrate(name)
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aerich/__init__.py", line 115, in migrate
    return await Migrate.migrate(name)
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aerich/migrate.py", line 138, in migrate
    return await cls._generate_diff_sql(name)
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aerich/migrate.py", line 110, in _generate_diff_sql
    version = await cls.generate_version(name)
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aerich/migrate.py", line 100, in generate_version
    last_version_num = await cls._get_last_version_num()
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aerich/migrate.py", line 91, in _get_last_version_num
    last_version = await cls.get_last_version()
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aerich/migrate.py", line 53, in get_last_version
    return await Aerich.filter(app=cls.app).first()
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/tortoise/queryset.py", line 908, in _execute
    instance_list = await self._db.executor_class(
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/tortoise/backends/base/executor.py", line 126, in execute_select
    _, raw_results = await self.db.execute_query(query.get_sql())
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/tortoise/backends/mysql/client.py", line 44, in translate_exceptions_
    return await func(self, *args)
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/tortoise/backends/mysql/client.py", line 204, in execute_query
    return cursor.rowcount, []
  File "/home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/tortoise/backends/base/client.py", line 308, in __aexit__
    await self.pool.release(self.connection)
RuntimeError: Task <Task pending name='Task-5' coro=<migrate() running at /home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aerich/cli.py:91> cb=[run_until_complete.<locals>.done_cb()]> got Future <Task pending name='Task-6' coro=<Pool._wakeup() running at /home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib/python3.8/site-packages/aiomysql/pool.py:188>> attached to a different loop
/usr/lib64/python3.8/asyncio/base_events.py:641: RuntimeWarning: coroutine 'Pool._wakeup' was never awaited

kkv0id avatar Sep 24 '21 02:09 kkv0id

What driver used?

long2ice avatar Sep 24 '21 03:09 long2ice

aiomysql

kkv0id avatar Sep 24 '21 03:09 kkv0id

@long2ice 大佬这个有解决方案吗?

kkv0id avatar Sep 24 '21 06:09 kkv0id

你试试 https://github.com/long2ice/asyncmy

long2ice avatar Sep 24 '21 07:09 long2ice

你试试 https://github.com/long2ice/asyncmy 换了驱动,执行 migrate 一毛一样的输出 @long2ice

kkv0id avatar Sep 24 '21 07:09 kkv0id

got Future <Task pending name='Task-7' coro=<Pool._wakeup() running at /home/kexirong/.cache/pypoetry/virtualenvs/qkacmdb-sanic-eYIlfS2d-py3.8/lib64/python3.8/site-packages/asyncmy/pool.py:164>> attached to a different loop

kkv0id avatar Sep 24 '21 07:09 kkv0id

你不用poetry run 试试

long2ice avatar Sep 24 '21 07:09 long2ice

你不用poetry run 试试

一样一样的,虽然试之前就知道poetry不会影响,还是听老哥的试了一下。 @long2ice

kkv0id avatar Sep 24 '21 07:09 kkv0id

有点奇怪,我这边没问题

long2ice avatar Sep 24 '21 08:09 long2ice

有点奇怪,我这边没问题

init-db 也没问题,错误信息中 attached to a different loop,是什么意思? 是tortoise 跟aerich 用了不同 loop 吗? tortoise 是默认使用uloop 还是需要额外的配置?

kkv0id avatar Sep 24 '21 08:09 kkv0id

意思是启动了不同的loop,本来应该是一个线程只会有一个loop

long2ice avatar Sep 24 '21 08:09 long2ice

项目早期,我的依赖只有以下这些

[tool.poetry.dependencies]
python = "^3.8"
tortoise-orm = {extras = ["asyncmy"], version = "^0.17.7"}
sanic = "^21.6.2"
sanic-jwt = "^1.7.0"


[tool.poetry.dev-dependencies]
aerich = "^0.5.8"

kkv0id avatar Sep 24 '21 08:09 kkv0id

我执行init-db之后没有改动任何地方,出于测试migrate,仅注释掉其中一个 模型定义的一个字段。我很疑惑,init-db一切正常,而执行migrate就 runtime error

kkv0id avatar Sep 24 '21 08:09 kkv0id

I have the same problem using poetry / virtualenv, aiomysql / asyncmy. aerich == 0.5.8 tortoise-orm == 0.17.8 aerich init-db creates initial migration, but on aerich migrate --name some_name I have an issue:

Traceback (most recent call last): File "/home/horizon/PycharmProjects/test_migrations/venv/bin/aerich", line 8, in <module> sys.exit(main()) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aerich/cli.py", line 258, in main cli() File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/click/core.py", line 1128, in __call__ return self.main(*args, **kwargs) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/click/core.py", line 1053, in main rv = self.invoke(ctx) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/click/core.py", line 1659, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/click/core.py", line 1395, in invoke return ctx.invoke(self.callback, **ctx.params) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/click/core.py", line 754, in invoke return __callback(*args, **kwargs) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/click/decorators.py", line 26, in new_func return f(get_current_context(), *args, **kwargs) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aerich/cli.py", line 33, in wrapper loop.run_until_complete(f(*args, **kwargs)) File "uvloop/loop.pyx", line 1501, in uvloop.loop.Loop.run_until_complete File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aerich/cli.py", line 91, in migrate ret = await command.migrate(name) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aerich/__init__.py", line 115, in migrate return await Migrate.migrate(name) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aerich/migrate.py", line 138, in migrate return await cls._generate_diff_sql(name) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aerich/migrate.py", line 110, in _generate_diff_sql version = await cls.generate_version(name) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aerich/migrate.py", line 100, in generate_version last_version_num = await cls._get_last_version_num() File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aerich/migrate.py", line 91, in _get_last_version_num last_version = await cls.get_last_version() File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aerich/migrate.py", line 53, in get_last_version return await Aerich.filter(app=cls.app).first() File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/tortoise/queryset.py", line 966, in _execute instance_list = await self._db.executor_class( File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/tortoise/backends/base/executor.py", line 129, in execute_select _, raw_results = await self.db.execute_query(query.get_sql()) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/tortoise/backends/mysql/client.py", line 44, in translate_exceptions_ return await func(self, *args) File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/tortoise/backends/mysql/client.py", line 204, in execute_query return cursor.rowcount, [] File "/home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/tortoise/backends/base/client.py", line 308, in __aexit__ await self.pool.release(self.connection) RuntimeError: Task <Task pending name='Task-5' coro=<migrate() running at /home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aerich/cli.py:91> cb=[run_until_complete.<locals>.done_cb()]> got Future <Task pending name='Task-6' coro=<Pool._wakeup() running at /home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aiomysql/pool.py:188>> attached to a different loop Task was destroyed but it is pending! task: <Task pending name='Task-6' coro=<Pool._wakeup() running at /home/horizon/PycharmProjects/test_migrations/venv/lib/python3.8/site-packages/aiomysql/pool.py:188>> /usr/lib/python3.8/asyncio/base_events.py:641: RuntimeWarning: coroutine 'Pool._wakeup' was never awaited image

sviatoslav-wesoftyou avatar Oct 14 '21 10:10 sviatoslav-wesoftyou

What about try asyncmy?

long2ice avatar Oct 14 '21 13:10 long2ice

What about try asyncmy?

应该是aerich 在migrate 时 启动了啥 导致sanic app被创建 ,我也依此思路解决了。但是上面的截图代码好像不会有这种问题,依然有这种问题 令人困惑

kkv0id avatar Oct 15 '21 03:10 kkv0id

aerich 会读取tortoise配置所在文件同时会引入并且执行里面的代码,所以最好配置文件和其他文件分开,防止不必要的引入

long2ice avatar Oct 15 '21 03:10 long2ice

aerich 会读取tortoise配置所在文件同时会引入并且执行里面的代码,所以最好配置文件和其他文件分开,防止不必要的引入

嗯, 但是 init-db 也会读取配置,没有问题,仅migrate 会有这样的问题, 建议优化下,或者文档中提示。这个问题出现概率不小

kkv0id avatar Oct 15 '21 03:10 kkv0id

I solved my problem by splitting config files and removing any imports from aerich config.

sviatoslav-wesoftyou avatar Oct 18 '21 08:10 sviatoslav-wesoftyou

这两天我也遇到这样的问题, 估计是跟引入的sanic的依赖有关, 今天特地切换了sanic和fastapi, 结果是 sanic venv 下有这个问题, fastapi venv没有, 应该是跟上面的描述一样 "What about try asyncmy?

应该是aerich 在migrate 时 启动了啥 导致sanic app被创建 ,我也依此思路解决了。但是上面的截图代码好像不会有这种问题,依然有这种问题 令人困惑"

amspring avatar Oct 29 '21 03:10 amspring