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.
というエラーがでて困るという事がありました.
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.
というような内容が出てしまったのでした.
ちょっと調べてみると
という pull-request がすでに作られており,このdiff を見た感じ google-protobuf
のバージョン指定が甘かったため,google-protobuf
のマイナーバージョンが 3.12.0
に上がったタイミングで非互換が出てしまっていたということがわかりました *1.以下の protocolbuffers/protobuf に対する pull-request に拠るもののようです:
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 のバージョンが上がる)と良いですね.
[追記]
マージされたようです.3.2.2 以降のバージョンの aws-fluent-plugin-kinesis を利用すればこの問題は解決できそうです.
*1:他にも atlassian/fluent-plugin-kinesis-aggregation でも同じような問題が起きていた様子