TL;DR

rust-toolchain を設定していると cargo install hoge で使うツールチェインも選んでしまう

rust-toolchain を無視したい場合には cargo +stable install hoge でいける

現象:手元で diesel_cli のインストールに失敗した

rust には cargo というビルドをしてくれたり、rust 製のツールをインストールしてくれたりするツールが標準で備わっている。
これを使って diesel_cli を再インストールしようとしたらコケた。

$ cargo install diesel_cli --force
    Updating crates.io index
  Installing diesel_cli v1.4.0
error: failed to compile `diesel_cli v1.4.0`, intermediate artifacts can be found at `/tmp/cargo-installmyVFdj`

Caused by:
  unable to get packages from source

Caused by:
  failed to parse manifest at `/home/kazuk/.cargo/registry/src/github.com-1ecc6299db9ec823/diesel-1.4.1/Cargo.toml`

Caused by:
  feature `rename-dependency` is required

this Cargo does not support nightly features, but if you
switch to nightly channel you can add
`cargo-features = ["rename-dependency"]` to enable this feature

心の声 「おいおい diesel さんいくらなんでも出たばっかりの 1.32.0 でコンパイル失敗するというか nightly 使えとかやんちゃすぎ」

issue を眺める

きっと issue 上がってるやろと github 見に行って検索すると…ほらあった。盛り上がってるやろーと眺めると

close されてますし、閑散としてます。

はて?

ふむふむ、1.31.0 で入ってる機能だから問題ない、まちがってない。
ふむふむ、debian がいかれたバージョニングしてて 0.31 に 1.30 が入ってて 0.32 に 1.31 が入ってる、それでおかしかったみたいだと。へー

おれ 1.32.0 いれてるから関係ないしとか思いながら色々試す。

普通に ~/ でやったら入ったし

シェルもう一個起こして cargo install 叩くと入るし!

$ cargo install diesel_cli --force
    Updating crates.io index
  Installing diesel_cli v1.4.0
   Compiling void v1.0.2
   Compiling semver-parser v0.7.0
   Compiling proc-macro2 v0.4.27
   Compiling cc v1.0.29
(ry)
   Compiling diesel_cli v1.4.0
    Finished release [optimized] target(s) in 1m 39s
   Replacing /home/kazuk/.cargo/bin/diesel

ここで rust-toolchain を指定してた事を思い出す。(プロジェクトで使うコンパイラのバージョン指定)

元シェルで rust-toolchain 見ると、ですよね、そうですよね。

$ cat rust-toolchain 
1.30.1

~/.cargo/bin 配下に入れる物のコンパイルに rust-toolchain 見るなよー、って怒りがふつふつと。

$ cargo --version
cargo 1.30.0 (a1a4ad372 2018-11-02)

あぁ、これ仕様だわ、サブコマンド解釈する前に rust-toolchain 読んでるんだもんね。

困るだろ? 大丈夫 +stable すれば良いんよ

cargo では +stable とすれば stable なツールチェインを使う(同様に +nightly なら nightly)事ができるので、この場合 cargo +stable install diesel_cli と叩けばマシンにインストールされた現状の stable でコンパイルインストールしてもらえるって事。

まとめ

    • diesel も cargo もバグってなかった

cargo install とかユーザーの home に入れる物のコンパイルに rust-toolchain が関係するのうっかり忘れがち

+stable で入るよ

广告
将在 10 秒后关闭
bannerAds