5

次のシナリオの実用的なプロトタイプを取得しようとしています:

  • 言語: さび ( rustc 1.45.0-nightly (ad4bc3323 2020-06-01))
  • フレームワーク: ロケット v0.4.4
  • ビルドツール: バゼル
  • プラットフォーム: Mac OS X / Darwin x64

実行bazel build //web-apiすると、以下のエラーが発生します。ファイルを見ると、Cargo.lockロケットのライブラリへの依存関係がhyperライブラリへの依存関係を指定しているためだと思いlog 0.3.9ます。なんらかの理由で、より最近の を使用していませんlog=0.4.x。そうは言っても、手動でビルドすると正常に動作するため、なぜこのライブラリをプルしているのかわかりません。

ERROR: /private/var/tmp/_bazel_nathanielford/2a39169ea9f6eb02fe788b12f9eae88f/external/raze__log__0_3_9/BUILD.bazel:27:1: error executing shell command: '/bin/bash -c CARGO_MANIFEST_DIR=$(pwd)/external/raze__log__0_3_9 external/rust_darwin_x86_64/bin/rustc "$@" --remap-path-prefix="$(pwd)"=__bazel_redacted_pwd  external/raze__log__0_3_9/src/lib.rs -...' failed (Exit 1) bash failed: error executing command /bin/bash -c 'CARGO_MANIFEST_DIR=$(pwd)/external/raze__log__0_3_9 external/rust_darwin_x86_64/bin/rustc "$@" --remap-path-prefix="$(pwd)"=__bazel_redacted_pwd' '' external/raze__log__0_3_9/src/lib.rs ... (remaining 24 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
error[E0425]: cannot find function `set_logger` in crate `log`
   --> external/raze__log__0_3_9/src/lib.rs:731:16
    |
731 |     match log::set_logger(&ADAPTOR) {
    |                ^^^^^^^^^^ not found in `log`
    |
help: consider importing this function
    |
204 | use set_logger;
    |

以下は私のディレクトリ構造です:

/
|-WORKSPACE
|-BUILD      # Empty
|-web-api/
| |-BUILD
| |-src/
| | |-main.rs
| |-cargo/
|   |-Cargo.toml
|   |-Cargo.lock
|   |-BUILD.bazel
|   |-remote/
|     |-... (Cargo-raze files)

をセットアップするために、 github ページcargo-razeの指示に従って、次のことを行いました。

$ cd web-api/cargo
$ cargo generate-lockfile  
$ cargo vendor --versioned-dirs --locked
$ cargo raze

(generate-lockfileCargo.lockファイルを作成し、 はファイルとサブディレクトリのすべての内容をcargo raze作成します。)BUILD.bazelremote

そして、bazel ビルドを実行するために、ルートに戻って を実行するとbazel build //web-api、上記のエラーが発生します。

これは私のWORKSPACEファイルです:

workspace(name = "rocket-bazel")

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "io_bazel_rules_rust",
    sha256 = "f21c67fc2fef9d57fa3c81fde1defd9e57d451883388c0a469ec1c470fd30dcb",
    strip_prefix = "rules_rust-master",
    urls = [
        "https://github.com/bazelbuild/rules_rust/archive/master.tar.gz"
    ],
)

http_archive(
    name = "bazel_skylib",
    sha256 = "9a737999532daca978a158f94e77e9af6a6a169709c0cee274f0a4c3359519bd",
    strip_prefix = "bazel-skylib-1.0.0",
    url = "https://github.com/bazelbuild/bazel-skylib/archive/1.0.0.tar.gz",
)

load("@io_bazel_rules_rust//rust:repositories.bzl", "rust_repositories")
rust_repositories(version="nightly", iso_date="2020-06-02")

load("@io_bazel_rules_rust//:workspace.bzl", "bazel_version")
bazel_version(name = "bazel_version")

load("//web-api/cargo:crates.bzl", "raze_fetch_remote_crates")
raze_fetch_remote_crates()

これは私のweb-api/BUILDファイルです:

load("@io_bazel_rules_rust//rust:rust.bzl", "rust_binary")

rust_binary(
    name = "web-api",
    srcs = ["src/main.rs"],
    deps = [
        "//web-api/cargo:rocket",
    ],
)

そして私のweb-api/cargo/Cargo.tomlファイル:

load("@io_bazel_rules_rust//rust:rust.bzl", "rust_binary")

rust_binary(
    name = "web-api",
    srcs = ["src/main.rs"],
    deps = [
        "//web-api/cargo:rocket",
    ],
)

何を試せばいいのかアイデアが尽きた。これを Bazel なしで、錆を使用するだけでコンパイルできます (ただし、明らかにファイルはわずかに異なる場所にあります)。Dockerコンテナ内でコンパイルできます。Bazel を正常に実行することができません (ベンダー モードまたはリモート モードのいずれかで、必然的にカーゴ レイズが必要です)。コンパイル ターゲットまたはナイトリー ビルドに不一致があり、適切に設定されていないと思いますが、そうではありません。それを診断または乗り越える方法を確認してください。

これは、私が試したファイル/構造のリポジトリへのリンクです。

4

1 に答える 1