Alpine Linux上のRubyでGoogle Cloud Datastoreを使うとクラッシュする件

投稿者: | 2019年10月1日

こんにちは、GMOアドマーケティングのmizkichです。
アドテクなマイクロサービスをGCPのKubernetesで運用しています。

Alpine Linux 上のRubyにはライブラリなどに欠けがあるらしく、Google Cloud Datastoreがまともに動作しません。
「require ‘google/cloud/datastore’」の行を書いただけでSegmentation Faultが発生し、コンパイルエラーになります。

この問題を解決したので、方法を共有します。

 

失敗例

GCP公式に書かれている書き方だと失敗します。

 

Alpine Linux環境だと、「require ‘google/cloud/datastore’」付近で以下のエラーが発生します。

 

Alpineで「ld-linux-x86-64.so(glibc)」が不足するのは割と情報があり、このDockerfileで解決できます。

すると、今度は以下のエラーが発生するようになりました。

 

成功例

結論から書くと、下記の設定で動きます。

 

Segmentation faultに対応するBug Reportが有り対処法も書かれていますが、それだけではDatastoreは動きませんでした。

google-gax , google-protobuf , google-cloud-datastore の三つについても、 BUNDLE_FORCE_RUBY_PLATFORM を用いてプラットフォームに依存しない強制的なインストールを行う必要がありました。

 

まとめ

Google製のライブラリが、Google製のOSで動かないってどうなってるんだと思うのですが、動くようになって良かったです。

同様の問題で困っている人の助けになれば幸いです。

The following two tabs change content below.

アバター

mizkich

Full Stack Engineer @ GMO AD Marketing, Inc.

DMP(Data Management Platform)の開発運用担当してます。
(Java x Ruby x Kubernetes x BigQuery x Hazelcast x etc)

マイブームは登山とスノボ。