rust + tonic 一些踩坑

Background

这段时间在用Rust写项目,感觉比C++和Go快乐多了。尤其是没有很shit的业务代码和坑的作伴,真的是很快乐。

一些踩坑

  • rust tonic build找不到proto文件
    这个问题很tricky,我在本地用debian的时候用的是tonic给的example那样写的。
tonic_build::compile_protos("proto/helloworld.proto").unwrap();

但是后面需要指定生成代码的存储路径,我就换用了tonic_build::configure

tonic_build::configure()
    .build_server(true)
    .build_client(true)
    .out_dir("src/proto")
    .compile(&["proto/helloworld.proto"], &["proto/"])
    .unwrap();

这个在我电脑上是work的,然而有个问题,等我把代码搬到了aws,就找不到proto文件了。我一开始以为是路径问题,但是我把路径改成绝对路径也不行,那个parser不支持绝对路径。

然后我试了半天,网上没有任何资料,自己也没有发现任何头绪,只能理解为tonic自带的一个bug,毕竟官方的repo的example也build不起来,这个肯定不是我自己的问题。

解决方法:
后面发现既然接受的是个pathbuf类型,而且只执行build.rs这个文件,那么这个文件一定是在runtime内被创建的,那么我直接用pathbuf去读designated path不就好了?

后面发现果然,这个方法work了。因为aws上的cargo好像把我的build.rs拿到了另一个地方编译,所以找不到文件了。哎,这个问题真的是很蛋疼。

    tonic_build::configure()
        .build_server(true)
        .build_client(true)
        .out_dir("src/proto")
        .compile(&[PathBuf::from("absolute_path/project_path/proto/helloworld.proto")], &[PathBuf::from("proto/")])
        .unwrap();

后续

抽到H1b了,下周开始搞codeforces,复健!!!

posted @ 2024-04-08 09:01  tiany7  阅读(201)  评论(0编辑  收藏  举报