Skip to content

3.5 channel=1.78.0 だと sqlx-core の推移的依存関係でビルドできない状態 #9

Closed
@mizchi

Description

@mizchi

問題

20241207現在、この sqlx-core の内部依存の変更を受け、書籍の手順を 1.78.0 で動かすことは出来ません。

sqlx-core -> url -> idna が 1.81.0 以降を要求します。

再現方法

rust-toolchain.toml で 1.78.0 を指定したまま、Cargo.lock を削除して cargo build し直すと、ビルドに失敗します。

# git clone <repo>
$ git switch chapter3
$ rm -r Cargo.toml target
$ cargo build
....
error[E0658]: use of unstable library feature 'error_in_core'
  --> /home/mizchi/.cargo/registry/src/index.crates.io-6f17d22bba15001f/idna-1.0.3/src/lib.rs:78:6
   |
78 | impl core::error::Error for Errors {}
   |      ^^^^^^^^^^^^^^^^^^
   |
   = note: see issue #103765 <https://github.com/rust-lang/rust/issues/103765> for more information

自分は書籍を読みつつこのリポジトリからコードをコピーして手順を再現しようとしたので、Cargo.lock だけ無視したのでこの状態になりました。

問題の発生理由

sqlx-core が依存する url crate は "version"="^2.2.2" が指定されており、今の状態で更新すると 2.5.2 から 2.5.4 に上がります。その推移的依存関係の idna が 0.5.0 -> 1.0.7 に更新され、これは 1.81 以降でしかビルドできません。

対応案

この本の手順を再現するために 1.78.0 を指定すると、Cargo.lock を移植しない限り、逆に動かない状態になります。

1.78.0 のままで動かすワークアラウンドとして、このリポジトリのCargo.lock をコピーすると問題を回避できるのは確認できています。

じゃあ 1.81.0 にあげるとそのまま解決するかと言うと、次の use が追加で必要になりました。

use axum::extract::State;

これは async fn health_check_db(State(db): State<PgPool>) -> StatusCode { でパターンマッチするための State の参照の解決ですが、マクロ解決か何かの影響を受けて書籍のコードは動きません。

なので、いずれにせよ何らかの対応をしないとこのリポジトリを動かすことができません。

  • 1.78.0 で Cargo.lock を移植する
  • 1.81.0 に use axum::extract::State; を追加する

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions