加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

生锈 – 可以在不构建应用程序的情况下下载和构建依赖项吗?

发布时间:2020-12-14 00:50:06 所属栏目:百科 来源:网络整理
导读:有没有办法告诉 Cargo安装和构建我的所有依赖项,但不是尝试构建我的应用程序? 我认为货物安装会这样做,但它实际上也一直在构建我的应用程序.我想进入一个状态,货物构建会发现所有依赖项都可以使用,但是没有触及/ src目录. 我真正想要实现的目标: 我正在尝
有没有办法告诉 Cargo安装和构建我的所有依赖项,但不是尝试构建我的应用程序?

我认为货物安装会这样做,但它实际上也一直在构建我的应用程序.我想进入一个状态,货物构建会发现所有依赖项都可以使用,但是没有触及/ src目录.

我真正想要实现的目标:

我正在尝试为Rust应用程序构建Docker镜像,我想在其中执行以下步骤:

构建时间(docker build.):

>导入已安装防锈工具的docker镜像
>添加我的Cargo.toml和Cargo.lock文件
>下载并构建所有依赖项
>将我的源目录添加到图像
>构建我的源代码

运行时间(docker run …):

>运行应用程序

我已经尝试了以下Dockerfile,但是指示的步骤也构建了我的应用程序(当然,由于源目录还没有,因此失败了):

FROM jimmycuadra/rust

ADD Cargo.toml /source
ADD Cargo.lock /source

RUN cargo install # <-- failure here

ADD src /source/src
RUN cargo build

ENTRYPOINT cargo run

我想将安装依赖项步骤与实际构建我的应用程序分开的原因是,如果我不更改依赖项,我希望Docker能够使用已安装和构建所有依赖项的缓存映像.因此,在安装dependecies之前我不能ADD / src / source / src,因为当我更改自己的代码时,这会使缓存的图像无效.

据我所知,在Cargo中只构建依赖项没有原生支持.有 an open issue for it.如果您可以向Cargo提交一些东西来完成它,或者可能创建第三方Cargo插件,我不会感到惊讶.当我自己的代码太破碎而不能编译时,我也想要货物文档的这个功能;-)

但是,我维护的Rust playground确实实现了您的最终目标.有一个base Docker container可以安装Rustup并在Cargo.toml中复制,所有的板条箱都可用于操场. The build steps create a blank project (with a dummy src/lib.rs),then calls cargo build and cargo build --release to compile the crates:

RUN cd / && 
    cargo new playground
WORKDIR /playground

ADD Cargo.toml /playground/Cargo.toml
RUN cargo build
RUN cargo build --release
RUN rm src/*.rs

所有下载的包装箱都存储在Docker镜像的$HOME / .cargo目录中,所有构建的包装箱都存储在应用程序目标/ {debug,release}目录中.

稍后,将真实的源文件复制到容器中,并使用现在编译的板条箱再次执行货物构建/货物运行.

如果您正在构建可执行项目,那么您也希望复制Cargo.lock.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读