我正在使用 alembic 来管理我的数据库更改。
其他人也可以向该数据库添加更改。
一切都设置正确,目前工作正常。
然而,因为我们要修改数据库很多,因此为每个修改创建新的 .py,所以我想将“version”文件夹从我的 github 存储库中移开,以避免淹没它。
然后,远程服务器就可以访问版本文件夹。
我们可以通过 sshfs 从本地计算机访问服务器,因此 Guy1 可能拥有 /mnt/myserver 的服务器,Guy2 可能拥有 /home/myserver 的服务器。
我希望能够将 version_locations 更改为
path_to_server/versions
。我没有设法使用 env.py 动态地做到这一点。关于如何做到这一点有任何想法吗?
到目前为止的计划是:
my_server_path = os.environ.get("my_server_path")
context.script.version_locations = f"{my_server_path}/versions"
我也尝试过
config.set_main_option("version_locations",f"{my_server_path}/versions")
并将 alembic.ini 中的 revision_environment
更改为 true 或 false,但也不起作用。
我最多有蒸馏器告诉我
FAILED: Multiple version locations present, please specify --version-path
,但是当一开始就应该只有一个路径时,指定路径是没有意义的。
其中一位维护者在here提到了下面的技巧,可以通过编程方式指定这一点。
from alembic import context
import os
script = context.script
def get_versions_path():
try:
versions_path = os.environ['ALEMBIC_VERSIONS_PATH']
except KeyError:
raise ValueError('You must specify a value for ALEMBIC_VERSIONS_PATH, which is the path to the /versions directory')
if not os.path.isdir(versions_path):
raise ValueError(f"ALEMBIC_VERSIONS_PATH of '{versions_path}' does not exist")
return versions_path
script.__dict__.pop('_version_locations', None)
script.version_locations = [get_versions_path()]
随时根据您的喜好修改
get_versions_path
。