`embed_migrations!` 宏由于 cargo 构建缓存而无法识别新的迁移文件
作者: fbecart创建于 2022年4月5日更新于 2026年7月13日
标签bug
□ 设置
QQ 版本数
- ** 柴油:1.4.8**
- 柴油 移民:1.4.0
- 移民:1.4.2
□ 问题描述
我用"embed migrations!"生成一个二进制来管理柴油的migration. 货物有时会再利用之前所建造的二进制,而不是建造新的二进制,因为它没有意识到它的缓存变得无效. 这发生在我只在"移民"目录中添加新文件的时候.
你想达到什么目的?
构建二进制运行 Diesel 迁移.
• 预期产出是什么?
由 " 货物建造 " 制作的二进制文件应管理所有移民档案,包括最近的文件。
实际产出是什么?
货箱没有重建 二进制已经过时了 因此,如果我运行二进制, 近期的迁移将会消失。
-你还有其他错误吗?
没有
- 复制步骤
`/src/bin/run-migrations.rs':
[宏用]
(一) 外接箱柴油;
使用常见( infra)::配置;
使用柴油:{pg:PgConnection,前奏:*};
// 相对于 Cargo.toml 的路径
嵌入式 移入式! ("./移入");
fn 主 () - > 结果 < (), Box <dyn std::: error:: oror * *{
让 connspect = 配置: get planet url ("数据库") ?
让 conn = PgConnection:: found( & connspect) ?
信息 ! (“ 允许迁移 ” );
嵌入式 迁移: run with output( & conn, & mut std::io:::stdout ()) ?
Ok((()))
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?- 运行 " 货物建造 "
- 增加新的迁移
- 再次运行 " 货物建造 " ,并观察到货物跳出建筑物。
由此产生的二进制错过了额外的 SQL 迁移 。
□ 核对表
工作间
可以使用“/building.rs”文件使构建缓存失效:
使用 std:: fs: 创建 dir all;
fn 主 () - > 结果 < (), Box <dyn std::: error:: oror * *{
println! ("货物:rerun-if-changed=migrants") ;
Ok((()))
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
内容来源: diesel-rs/diesel