質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

1回答

1891閲覧

feature has been removed

apo

総合スコア362

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

1グッド

0クリップ

投稿2021/04/14 09:28

前提・実現したいこと

参考サイトを基にRustでCRUD操作をしようと思います。

「cargo build --release && cd target/release/」を実行するとビルドエラーになります。

発生している問題・エラーメッセージ

apo@gentoo ~/Documents/project/make/rust/rocket-diesel-rest-api-example $ cargo build --release && cd target/release/ Compiling pear_codegen v0.0.14 Compiling url v1.7.0 Compiling rayon-core v1.4.0 error[E0557]: feature has been removed --> /home/apo/.cargo/registry/src/github.com-1ecc6299db9ec823/pear_codegen-0.0.14/src/lib.rs:1:45 | 1 | #![feature(plugin_registrar, rustc_private, quote)] | ^^^^^ feature has been removed error[E0462]: found staticlib `rustc` instead of rlib or dylib --> /home/apo/.cargo/registry/src/github.com-1ecc6299db9ec823/pear_codegen-0.0.14/src/lib.rs:3:1 | 3 | extern crate rustc; | ^^^^^^^^^^^^^^^^^^^ | = help: please recompile that crate using --crate-type lib = note: the following crate versions were found: crate `rustc`: /home/apo/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a crate `rustc`: /home/apo/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.lsan.a crate `rustc`: /home/apo/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.tsan.a crate `rustc`: /home/apo/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.msan.a error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0557`. error: could not compile `pear_codegen` To learn more, run the command again with --verbose. warning: build failed, waiting for other jobs to finish... error[E0713]: borrow may still be in use when destructor runs --> /home/apo/.cargo/registry/src/github.com-1ecc6299db9ec823/url-1.7.0/src/form_urlencoded.rs:261:40 | 259 | impl<'a> Target for ::UrlQuery<'a> { | -- lifetime `'a` defined here 260 | fn as_mut_string(&mut self) -> &mut String { &mut self.url.serialization } 261 | fn finish(self) -> &'a mut ::Url { self.url } | ^^^^^^^^ - here, drop of `self` needs exclusive access to `*self.url`, because the type `UrlQuery<'_>` implements the `Drop` trait | | | returning this value requires that `*self.url` is borrowed for `'a` error: aborting due to previous error For more information about this error, try `rustc --explain E0713`. error[E0713]: borrow may still be in use when destructor runs --> /home/apo/.cargo/registry/src/github.com-1ecc6299db9ec823/url-1.7.0/src/form_urlencoded.rs:261:40 | 259 | impl<'a> Target for ::UrlQuery<'a> { | -- lifetime `'a` defined here 260 | fn as_mut_string(&mut self) -> &mut String { &mut self.url.serialization } 261 | fn finish(self) -> &'a mut ::Url { self.url } | ^^^^^^^^ - here, drop of `self` needs exclusive access to `*self.url`, because the type `UrlQuery<'_>` implements the `Drop` trait | | | returning this value requires that `*self.url` is borrowed for `'a` error: aborting due to previous error For more information about this error, try `rustc --explain E0713`. error: build failed

該当のソースコード

~/.cargo/registry/src/github.com-1ecc6299db9ec823/pear_codegen-0.0.14/src/lib.rs

Rust

1#![feature(plugin_registrar, rustc_private, quote)]

試したこと

「Cargo.toml」に

[dependencies] quote = "1.0"

と追加してみましたが、変わりませんでした。

rustup update cargo update

を実行してみましたが、変わりませんでした。

「rust quote feature has been removed」でググってみましたが
有用な情報は見つかりませんでした。

補足情報(FW/ツールのバージョンなど)

cargo:cargo 1.53.0-nightly (65d57e6f3 2021-04-04)

全てのソースコード
https://github.com/ringo-apo/rocket-diesel-rest-api-example

よろしくお願いします。

Soei👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

console

1error[E0557]: feature has been removed 2 --> /home/apo/.cargo/registry/src/github.com-1ecc6299db9ec823/pear_codegen-0.0.14/src/lib.rs:1:45 3 | 41 | #![feature(plugin_registrar, rustc_private, quote)] 5 | ^^^^^ feature has been removed

このエラーに出ているfeatureとは、nightly版のRustコンパイラーにある、非安定で実験的な機能のことです。nightly版にはさまざまなfeatureがありますが、それらの多くは頻繁に仕様が変更され、その後、安定化されてstable版で使えるようになったり、安定化されることなく廃止されたりします。

Rustではいったん安定化された機能は基本的にRustのバージョンが上がっても使えますが、非安定なfeatureについては数週間もしないうちに仕様が変わってしまい、コードの書き換えが必要になることが多いです。ちなみに最近のnightly版がサポートしているfeatureの情報は こちら にあります。

参考にされている記事は3年前のものです。当時のバージョンのRocketが依存していたpear_codegenクレート v0.0.14が「quote」というfeatureを使用していますが、最新のnightly版コンパイラーではquoteがなくなっているためにエラーになっています。

エラーの解決方法はいくつかあります。

その場しのぎな解決法

  • Rocketのバージョンはそのまま(v0.3.6)で、記事が書かれたのと同時期のRust nightlyを使用する。
  • この方法は依存クレートのアップデート状況などによって、うまくいかないことも多い。

根本的な解決法

  • 最新版のRocket(v0.4.7)と、最新のRust nightlyを使用する。
  • この方法はコードの書き換えが必要になることが多い。

おすすめはもちろん根本的に解決することですが、私もいますぐには対応できません。

すみませんが、まずは、その場しのぎな方をやってみてください。一応、手元で試したところ、hero-apiの手前まではコンパイルできました。(hero-apiはMySQLがインストールされていないとコンパイルできないため)

参考にされている記事に、使用したrustcバージョンが載っています。

console

1$ cargo --version && rustc --version 2cargo 1.26.0-nightly (5f83bb404 2018-03-09) 3rustc 1.26.0-nightly (55c984ee5 2018-03-16)

このバージョンはrustupを使うと今でも取得できるのですが、私の手元でそのバージョンを使ってみたところ以下のエラーが出ました。

console

1$ cargo build 2... 3 4error: failed to run custom build command for `pear_codegen v0.0.14` 5process didn't exit successfully: `... /rocket-diesel-rest-api-example/target/debug/build/pear_codegen-96c8cc948c5bfdfe/build-script-build` (exit code: 101) 6--- stderr 7Error: Pear requires a more recent version of rustc. 8Use `rustup update` or your preferred method to update Rust. 9Installed version is: 1.26.0-nightly (2018-03-16). 10Minimum required: 1.27.0-nightly (2018-04-03). 11thread 'main' panicked at 'Aborting compilation due to incompatible compiler.', /home/tatsuya/.cargo/registry/src/github.com-1ecc6299db9ec823/pear_codegen-0.0.14/build.rs:43:13 12note: Run with `RUST_BACKTRACE=1` for a backtrace. 13 14warning: build failed, waiting for other jobs to finish... 15error: build failed

元記事ではそれで動いていたようなので釈然としませんが、言われたとおり1.27.0-nightly (2018-04-03)を使うことにします。

その場しのぎな解決法:記事が書かれたのと同時期のRust nightlyを使用する

rustupで当時のnightlyをインストールします。

console

1# 欲しいのは1.27.0-nightly (2018-04-03)。 2# 日付を1日後ろにずらすと正しいものが取得できる。 3$ rustup install nightly-2018-04-04 4 5$ rustc +nightly-2018-04-04 -V 6rustc 1.27.0-nightly (637ac17c5 2018-04-03)

次にrocket-diesel-rest-api-exampleのディレクトリーに移動して、rust-toolchainファイルを作成します。これにより、rocket-diesel-rest-api-exampleではnightly-2018-04-04が使われるようになります。

console

1$ echo 'nightly-2018-04-04' > rust-toolchain

次にCargo.lockを元記事のもので置き換えます。なぜなら、手元で試したところ以下の問題があったからです。

  1. 質問者さまのリポジトリーにあるCargo.lockファイルは、フォーマットが新しすぎて、nightly-2018-04-04のCargoでは読めない。
  2. そこでCargo.lockファイルを削除してcargo buildを実行したところ、「Resolving dependency graph...」がいつまでたっても終わらなくなってしまった。

元記事のCargo.lockを使ったところ、これらの問題が回避できました。以下のコマンドを実行します。

console

1$ rm Cargo.lock 2$ curl -L -O https://raw.githubusercontent.com/sean3z/rocket-diesel-rest-api-example/master/Cargo.lock

これでビルドしてみてください。私のところでは先ほど書いたとおりhero-apiの手前まではコンパイルできました。

console

1$ cargo build 2 ... 3 Compiling pear_codegen v0.0.14 4 Compiling rocket v0.3.7 5 Compiling rocket_codegen v0.3.7 6 ... 7 Compiling hero-api v0.1.0 (file:/// ... /rocket-diesel-rest-api-example) 8error: environment variable `DATABASE_URL` not defined 9 --> src/db.rs:12:29 10 | 1112 | static DATABASE_URL: &str = env!("DATABASE_URL"); 12 | ^^^^^^^^^^^^^^^^^^^^ 13 14error: aborting due to previous error 15 16error: Could not compile `hero-api`.

今日のところはこれで時間切れです。後日(週末くらい?)、根本的な解決法を調べてみようと思います。

投稿2021/04/14 14:11

編集2021/04/14 22:04
tatsuya6502

総合スコア2046

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apo

2021/04/14 21:05

丁寧なご回答ありがとうございます。 試してみます。
apo

2021/04/14 23:32

ご教示頂いた内容を試したところ上記エラーがなくなりました。 色々と勉強になりました。「Cargo.lock」ファイルなんて気にしたことありませんでした。 上記エラーは消えましたが別のエラーが発生しました。 とりあえず上記エラーは対処できましたのでこの質問は解決済みに致します。 ありがとうございました。
tatsuya6502

2021/04/15 11:48

状況についてご報告ありがとうございます。承知しました。とりあえず元のエラーは解決したということでよかったです。 また何か困ったことがあったら、新しい質問を作ってください。 自分も久しぶりにRocketを触ってみようかと思いますので、根本的な対応の方も試してみたいと思います(多分、週末になります)。 何か進展があったら、この質問の回答欄などでお知らせします。
apo

2021/04/15 12:35

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問