ハマった、、4時間ぐらい無駄にしたのでメモ
rustのアプリケーションをDockerビルドしていたら、cargo build
で「error: failed to run custom build command for openssl v0.9.24
」とエラーが表示されてビルドできなかった、
tl;dr
slack-hook
クレートの依存ライブラリに古いreqwestが含まれるせいだった
[dependencies]
scraper = "0.11.0"
reqwest = "0.9.22"
# slack-hook = "0.7"
url = "2.1.1"
もろもろ
rust:1.38
のDockerイメージを使って cargo build
した場合こんなエラーが出た
Compiling libflate v0.1.27
Compiling flate2 v1.0.12
Compiling url v1.7.2
Compiling url v2.1.1
error: failed to run custom build command for `openssl v0.9.24`
Caused by:
process didn't exit successfully: `/target/release/build/openssl-c2f879b18e9e24ad/build-script-build` (exit code: 101)
--- stderr
thread 'main' panicked at 'Unable to detect OpenSSL version', /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/openssl-0.9.24/build.rs:16:14
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
warning: build failed, waiting for other jobs to finish...
error: build failed
hyperの依存関係にopensslが含まれているが、見当たらないということらしく、解決策をいろいろ漁るも全く効果なし
- https://qiita.com/hikarin522/items/790489b14acacd1b9b81
- https://qiita.com/hhatto/items/963e38e366f00af94531
- https://qiita.com/dalance/items/7a871fa3d9694b160edd
- https://github.com/rust-lang/rustup/issues/1518
依存関係ちゃんとみたいから cargo-tree
入れて依存関係をみてみる
$ cargo install cargo-tree
$ cargo tree
├── reqwest v0.10.3
│ ├── hyper-tls v0.4.1
│ │ ├── bytes v0.5.4 (*)
│ │ ├── hyper v0.13.2 (*)
│ │ ├── native-tls v0.2.3
│ │ │ ├── log v0.4.8 (*)
│ │ │ ├── openssl v0.10.28
│ │ │ │ ├── bitflags v1.2.1
│ │ │ │ ├── cfg-if v0.1.10 (*)
│ │ │ │ ├── foreign-types v0.3.2 (*)
│ │ │ │ ├── lazy_static v1.4.0 (*)
│ │ │ │ ├── libc v0.2.67 (*)
│ │ │ │ └── openssl-sys v0.9.54 (*)
│ │ │ ├── openssl-probe v0.1.2
│ │ │ └── openssl-sys v0.9.54 (*)
├── slack-hook v0.7.0
│ ├(省略)
│ ├── reqwest v0.7.3
(省略)
slack-hook
クレートもrewest
に依存してるやん!!しかもバージョンがv0.7.3と古い!!!
slack-hook
クレートはslackのwebhookを簡単にしてくれるライブラリなので入れたのだが、、今回はこれを使うことで逆に時間を無駄にしてしまった。。。slack-hook
クレートは使わないことにして、webhookを叩く処理はおとなしく自前で書いた
fn send_slack() {
let url = std::env::var("SLACK_WEBHOOK_URL").expect("CAN'T GET `SLACK_WEBHOOK_URL` ENV");
let mut map = HashMap::new();
map.insert("text", format!("HOGEHOGE"));
let mut response = reqwest::Client::new()
.post(&url)
.json(&map)
.send();
}