LoginSignup
13
4

More than 5 years have passed since last update.

cargo と rust-toolchain で install がうまくない話

Last updated at Posted at 2019-02-07

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4