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 で入るよ