rust + tonic 一些踩坑
Background
這段時間在用Rust寫項目,感覺比C++和Go快樂多了。尤其是沒有很shit的業(yè)務(wù)代碼和坑的作伴,真的是很快樂。
一些踩坑
- 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不支持絕對路徑。
然后我試了半天,網(wǎng)上沒有任何資料,自己也沒有發(fā)現(xiàn)任何頭緒,只能理解為tonic自帶的一個bug,畢竟官方的repo的example也build不起來,這個肯定不是我自己的問題。
解決方法:
后面發(fā)現(xiàn)既然接受的是個pathbuf類型,而且只執(zhí)行build.rs這個文件,那么這個文件一定是在runtime內(nèi)被創(chuàng)建的,那么我直接用pathbuf去讀designated path不就好了?
后面發(fā)現(xiàn)果然,這個方法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();
后續(xù)
抽到H1b了,下周開始搞codeforces,復(fù)健!!!
天才選手zerol的主頁:https://zerol.me/
|
WeepingDemon的個人主頁:https://weepingdemon.gitee.io/blog/

浙公網(wǎng)安備 33010602011771號