【问题标题】:Manage sqlite database with git使用 git 管理 sqlite 数据库
【发布时间】:2019-10-16 03:29:22
【问题描述】:

我有一个将 sqlite 指定为数据库选择的小项目。

对于这个特定的项目,框架是 Django,服务器由 Heroku 托管。为了使数据库正常工作,无论何时将项目部署到持续集成工具或开发站点,都必须使用迁移命令和凭据进行设置。

问题是,许多这些环境实际上并没有使用源存储库附带的 my_project.sqlite3 文件,我们使用 git 对其进行版本控制。如何将更改合并到已部署的数据库中?设置数据库的脚本是否适合这种情况?同时,值得注意的是,有一些安全凭证不应该以未加密的方式出现在脚本中,这使得情况变得棘手。

【问题讨论】:

    标签: django database sqlite deployment


    【解决方案1】:

    其中许多环境实际上并未使用源存储库附带的 my_project.sqlite3 文件

    如果您的部署平台不支持您选择的数据库,那么您的开发环境可能应该转移到使用他们支持的数据库之一。在开发和生产中运行不同的数据库是可能的,但这似乎是令人头疼的根源。

    我发现许多文章指出 Heroku 在生产环境中不支持 SQLite,而是推荐使用 Postgres。

    如何将更改合并到已部署的数据库中?设置数据库的脚本是否适合这种情况?

    我假设您只是从一个数据库中提取数据以提供给另一个数据库,所以是的,只要每次更新代码时该脚本都是一次批处理操作,那么应该没问题。如果您在生产中添加/操作数据然后将其导出到您的 git,您将需要其他东西。

    同时,值得注意的是,有些安全凭证不应以未加密的方式出现在脚本中

    环境变量应该可以解决这个问题。您将主机设置为具有带有凭据的环境变量,然后在脚本中检索它们。你正在寻找这样的东西:

    # Set environment vars
    os.environ['USER'] = 'username'
    os.environ['PASSWORD'] = 'password'
    
    # Get environment vars
    USER = os.getenv('USER')
    PASSWORD = os.environ.get('PASSWORD')
    

    【讨论】:

    • 是的,我读过 Heroku 和 Django,首选 Postgres。但是对于我们现在做的这个项目,还得用一段时间的SQLite,实在是太乏味了。
    • 当我谈论凭据时,我在考虑例如 OAuth 的令牌。我如何存储它们以确保安全?
    • @jackxujh 支持的胶水会比需要的多,令人讨厌
    • @jackxujh 你能根据密码加密它们吗?这真的取决于你的用例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多