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 数据库接口

LGPL-3.0

26KB
313

Trek Travis构建状态

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(),传入迁移文件夹的路径和迁移的蛇形名称。无论哪种方式,您都会在迁移文件夹中获得一个新的迁移框架。生成框架后,将框架转换为完整的迁移需要进行几个手动步骤

  1. 用您的 SQL 填充新的迁移框架。`up` 方法提供了应用迁移的 SQL,而 `down` 方法提供了撤销迁移的 SQL。
  2. 将 `pub mod <migration file name>` 行添加到迁移文件夹中的 `mod.rs` 文件。这将导出您的新的迁移,以便在步骤 3 中使用。
  3. 更新您的 MigrationIndex 的 `Default` 实现,以包含新的迁移。例如,请参阅 `examples/migration_index.rs` 的底部。

运行迁移

示例程序在 `example/example.rs` 中提供了集成 Trek 迁移应用和回滚功能的示例代码。建议您将此代码复制到自己的程序中,以便可以从自己程序的 CLI 界面应用或回滚迁移。

测试设置

Trek 期望一个空的 PostgreSQL 数据库,它可以进行测试。为了设置测试

  1. 创建一个名为 trek_test 的新数据库:连接到您的 postgres 数据库并运行 create database trek_test;
  2. 设置环境变量,以提供新数据库的连接信息:在 `tests/env_vars_example.sh` 中有一个骨架 shell 脚本。将此文件复制到 `tests/env_vars.sh` 并编辑 `env_vars.sh`,以将您的数据库名称、用户名和其他信息填写完整。连接参数预计使用 rust-postgres crate 的格式。
  3. 通过运行 source tests/env_vars.sh 来加载环境变量。
  4. 使用 cargo test 运行测试。

依赖关系

~7MB
~144K SLoC