在 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();
}
红框内是我当前的项目目录:
当我运行程序时,这是一个错误。
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”的版本,但我不知道我可以使用哪一个版本。
想请问高手如何修改版本才能正常使用
我不确定您的 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");