その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

td-agent-gem で `google-protobuf requires Ruby version < 2.8.dev, >= 2.5.` みたいなエラーが出るって時

td-agent-gem を利用している時に google-protobuf requires Ruby version < 2.8.dev, >= 2.5. というエラーがでて困るという事がありました.

support.treasuredata.com

td-agent の ChangeLog を見た感じ,この記事を書いている時点での td-agent の最新バージョン v3.7.1 にバンドルされている ruby のバージョンは 2.4.10 のようなので,このエラーメッセージの内容は正しそうです.


そもそもなぜこのようなことが起きたかというと,awslabs/aws-fluent-plugin-kinesis を td-agent-gem でインストールしようとした際に

ERROR:  Error installing fluent-plugin-kinesis:
        google-protobuf requires Ruby version < 2.8.dev, >= 2.5.

というような内容が出てしまったのでした.

ちょっと調べてみると

github.com

という pull-request がすでに作られており,このdiff を見た感じ google-protobuf のバージョン指定が甘かったため,google-protobuf のマイナーバージョンが 3.12.0 に上がったタイミングで非互換が出てしまっていたということがわかりました *1.以下の protocolbuffers/protobuf に対する pull-request に拠るもののようです:

github.com


aws-fluent-plugin-kinesis に出ている pull-request がマージされないとどうしようもない感じがするのですが,そう待ってはおれんので以下のように「先に google-protobuf:3.11.4 をインストールしてしまう」ワークアラウンドを書いて現状は乗り切っています.

$ td-agent-gem install google-protobuf:3.11.4 --no-ri --no-rdoc
$ td-agent-gem install fluent-plugin-kinesis --no-ri --no-rdoc


以上です.はやく pull-request がマージされる (あるいは td-agent にバンドルされている ruby のバージョンが上がる)と良いですね.


[追記]

github.com

マージされたようです.3.2.2 以降のバージョンの aws-fluent-plugin-kinesis を利用すればこの問題は解決できそうです.

*1:他にも atlassian/fluent-plugin-kinesis-aggregation でも同じような問題が起きていた様子