#3119·diesel

`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':

2zz
[宏用]
(一) 外接箱柴油;

使用常见( 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 迁移 。

□ 核对表

  • [x]我已经查看了问题追踪器讨论论坛,以讨论可能关闭的类似问题。
  • 这个问题可以在Rust的稳定频道上再现. (你的问题将是: (如果情况并非如此)
  • 这个问题可以复制,不需要第三方的箱子

工作间

可以使用“/building.rs”文件使构建缓存失效:

4zz
使用 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