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,复健!!!
天才选手zerol的主页:https://zerol.me/
|
WeepingDemon的个人主页:https://weepingdemon.gitee.io/blog/