首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Bazel语言编写火箭

用Bazel语言编写火箭
EN

Stack Overflow用户
提问于 2020-06-07 22:09:56
回答 1查看 817关注 0票数 5

我试图获得以下场景的工作原型:

  • 语言:铁锈(rustc 1.45.0-nightly (ad4bc3323 2020-06-01))
  • 框架:火箭v0.4.4
  • 构建工具: Bazel
  • 平台: Mac /达尔文x64

运行bazel build //web-api会产生以下错误。我相信,基于查看Cargo.lock文件,这是因为Rocket对hyper库的依赖指定了对log 0.3.9库的依赖。不管出于什么原因,它没有使用最近的log=0.4.x。尽管如此,我不知道它为什么要拉这个库,因为如果我手动构建它,它就能正常工作。

代码语言:javascript
复制
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;
    |

以下是我的目录结构:

代码语言:javascript
复制
/
|-WORKSPACE
|-BUILD      # Empty
|-web-api/
| |-BUILD
| |-src/
| | |-main.rs
| |-cargo/
|   |-Cargo.toml
|   |-Cargo.lock
|   |-BUILD.bazel
|   |-remote/
|     |-... (Cargo-raze files)

为了设置cargo-raze,我按照github页面的说明执行了以下操作:

代码语言:javascript
复制
$ cd web-api/cargo
$ cargo generate-lockfile  
$ cargo vendor --versioned-dirs --locked
$ cargo raze

( generate-lockfile创建Cargo.lock文件,cargo raze创建BUILD.bazel文件和remote子目录的所有内容。)

然后,为了执行bazel构建,我返回根并运行bazel build //web-api,这将产生上述错误。

这是我的WORKSPACE文件:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
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成功运行(在供应商或远程模式下,这种情况下必须使用cargo raze ):我假设编译目标或夜间构建中有一些不匹配的地方,但我不知道如何诊断或克服这些错误。

下面是一个带有我尝试过的文件/结构的链接到存储库

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-21 00:12:08

当我使用生锈和日志箱与env_logger机箱一起创建一个最小的Bazel工作区时,我也遇到了类似的问题。我发现了一个类似的问题,当您尝试编译而没有特性= "std“时。然后,我试图在日志依赖项的Cargo.toml中启用它,但没有成功。

我的解决方案是在Cargo.toml下的[raze]中添加:

代码语言:javascript
复制
default_gen_buildrs = true

我可以追溯到在生成的日志机箱中没有设置default_gen_buildrs标志时,BUILD.bazel文件没有cargo_build_script定义或者这个:

代码语言:javascript
复制
crate_features = [
      "std",
    ],
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62252327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档