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