读取迁移时出错:无法在此目录或任何父目录中找到迁移目录

问题描述 投票:0回答:1

在 Rust 程序中使用 `embed_migrations()` 连接 postgresql 时会出现错误。

Crago.toml

[package]
name = "web_test"
version = "0.1.0"
edition = "2021"


[dependencies]
diesel = {version = "1.4",features = ["postgres","r2d2","uuid","chrono"]}
diesel_migrations = "1.4.0"

代码

use diesel_migrations::embed_migrations;

embed_migrations!();

pub fn init() {
    lazy_static::initialize(&POOL);
    let conn = connection().expect("Failed to connect");
    embedded_migrations::run(&conn).unwrap();
}

红框内是我当前的项目目录:

enter image description here

当我运行程序时,这是一个错误。

error: proc-macro derive panicked
  --> web_test\src\db.rs:12:1
   |
12 | embed_migrations!();
   | ^^^^^^^^^^^^^^^^^^^
   |
   = help: message: Error reading migrations: Unable to find migrations directory in this directory or any parent directories.
   = note: this error originates in the macro `embed_migrations` (in Nightly builds, run with -Z macro-backtrace for more info)

我认为该错误是“diesel”或“diesel_migrations”的版本,但我不知道我可以使用哪一个版本。

想请问高手如何修改版本才能正常使用

rust migration
1个回答
0
投票

我不确定您的 Diesel 设置是否正确,因此我将提出一些建议。

您似乎正在尝试使用旧版本的 Diesel。 Diesel 从 1.4.x 到 2.0 版本进行了多项更改,包括 diesel_migration 重写。如果可能的话,我建议使用它的最新版本。

cargo install diesel_cli

并验证是否已安装

diesel --version

查看您的文件目录,您似乎缺少迁移目录。

您可以自己添加迁移目录,但在 Diesel 的网站上,他们有一个 Getting Started 部分,如果您安装了

diesel-cli
,您应该能够运行
diesel setup
,它会自动创建迁移目录你。我推荐这个,因为您可以通过
diesel-cli
.

生成迁移

如果

embed_migrations
在查找迁移目录时遇到问题,您可以直接指定该目录。

来自 diesel_migrations::embed_migrations

的 Rust 文档

如果未指定,Diesel 将以与 Diesel CLI 相同的方式搜索迁移目录。如果指定,路径应该相对于 Cargo.toml 所在的目录。

示例如下

use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness};
pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!("../../migrations/postgresql");
© www.soinside.com 2019 - 2024. All rights reserved.