5个版本
使用旧Rust 2015
0.3.1 | 2018年1月21日 |
---|---|
0.3.0 | 2016年11月20日 |
0.2.2 | 2016年1月4日 |
0.2.1 | 2015年9月24日 |
0.2.0 | 2015年9月20日 |
#2535 in 数据库接口
26KB
313 行
Trek
Rust程序数据库迁移管理。
所有在 src
文件夹中的代码均受LGPL v3+许可。所有在 examples
文件夹中的代码均受MIT许可。
要在项目中使用crates.io上的Trek,请在您的 Cargo.toml
中将其添加为依赖项
[dependencies]
trek = "0.3.1"
用法
Trek的核心是 MigrationIndex
类,它跟踪所有迁移并管理应用和回滚。建议您在程序中为 MigrationIndex
添加一个 Default
特质的实现。这允许创建一个关于程序中存在的数据库迁移列表的单一来源。不幸的是,Rust不允许在来自其他crate的结构上实现特质,所以您必须在自己的程序中创建一个 MigrationIndex
包装器并在其上实现 Default
特质。幸运的是,这个样板代码很简单,可以从示例程序的实现中复制(在 examples/migration_index.rs
中)。记得复制后编辑该文件中的 Default
特质并将其设置为空迁移列表。当您添加新迁移时,您将在该文件中的 Default
实现中添加它们。
您还需要在源树中创建一个文件夹来存储迁移,以及一个 mod.rs
文件来导出它们。每个迁移都是该文件夹中自己文件中的一个结构体。示例程序使用 examples/migrations/
文件夹来存储其迁移。
为了便于使用,请查看示例程序 examples/example.rs
,以了解如何将Trek钩入您自己的程序,以便您可以通过您自己程序的CLI界面使用Trek的迁移管理。
创建迁移
注意:Trek期望迁移名称为蛇形命名法,如 my_new_migration
。
如果您将 Trek 集成到程序命令行界面(CLI)中,就像示例程序一样,那么添加新的迁移就像这样简单:cargo run my_program -- trek g migration new_migration_name
(如果您想用示例程序尝试,请使用 cargo run --example example -- trek g migration new_migration_name
)。否则,您需要通过程序调用 Trek::create_migration()
,传入迁移文件夹的路径和迁移的蛇形名称。无论哪种方式,您都会在迁移文件夹中获得一个新的迁移框架。生成框架后,将框架转换为完整的迁移需要进行几个手动步骤
- 用您的 SQL 填充新的迁移框架。`up` 方法提供了应用迁移的 SQL,而 `down` 方法提供了撤销迁移的 SQL。
- 将 `
pub mod <migration file name>
` 行添加到迁移文件夹中的 `mod.rs` 文件。这将导出您的新的迁移,以便在步骤 3 中使用。 - 更新您的 MigrationIndex 的 `
Default
` 实现,以包含新的迁移。例如,请参阅 `examples/migration_index.rs` 的底部。
运行迁移
示例程序在 `example/example.rs` 中提供了集成 Trek 迁移应用和回滚功能的示例代码。建议您将此代码复制到自己的程序中,以便可以从自己程序的 CLI 界面应用或回滚迁移。
测试设置
Trek 期望一个空的 PostgreSQL 数据库,它可以进行测试。为了设置测试
- 创建一个名为
trek_test
的新数据库:连接到您的 postgres 数据库并运行create database trek_test;
- 设置环境变量,以提供新数据库的连接信息:在 `tests/env_vars_example.sh` 中有一个骨架 shell 脚本。将此文件复制到 `tests/env_vars.sh` 并编辑 `env_vars.sh`,以将您的数据库名称、用户名和其他信息填写完整。连接参数预计使用 rust-postgres crate 的格式。
- 通过运行
source tests/env_vars.sh
来加载环境变量。 - 使用
cargo test
运行测试。
依赖关系
~7MB
~144K SLoC