LoginSignup
4
1

More than 3 years have passed since last update.

Chef で Ruby 2.4 を使っていて依存関係を解決した話

Last updated at Posted at 2021-03-22

Chef で Ruby 2.4 を使っていて依存関係を解決した話

td-agent Ruby
v4 2.7
v3 2.4

起こったこと

       STDERR: ERROR:  Error installing fluent-plugin-bigquery:
        signet requires Ruby version >= 2.5.

chef でインストールバージョンを特に変更していないのに,fluent-plugin-bigqueryのインストールができなくなった.
Error は,requires Ruby version >= 2.5
確かに,今の td-agent の Ruby version は 2.4 なので満たせていないが,今までインストールできていた.

Require (Ruby) version を確認する

依存関係を確認する

例えば,1つの gem の require を確認するのは簡単だが,そこに至るrequire tree を確認しておかないとどういう解決をするか検討しにくい.

とりあえず,これは Require 2.5 なので無理.

検索してみたところ依存関係を再帰的に辿ってくれれるツールがあるらしい.

http://rubygems.org/https://rubygems.org/ にするだけで動く

どういう依存ツリーでそのパッケージ(Ruby 2.5 以上を必要としているかはこれでわかる)

required バージョンを確認する

$ ruby depsearch.rb fluent-plugin-bigquery | grep signet | sed -e 's/^ *//' | uniq
signet ~> 0.14

version 0.14.1 → 0.15 で変更になっている.

バージョン 説明
~> x.0 x.1からx.9は良いが、メインのバージョンがあがるとは不可。例えば、3.2は良いが、4.0は不可など

対応する

シンプルには,td-agent パッケージを v4 にすれば Ruby 2.7 になってOK そうだが,
td-agent パッケージを上げるのが少し面倒だった.
(td-agent が v4 に対応していないというのもある)

v3 のまま何かできないかと考えて,先に必要なgem をインストールしておけばrequired が満たされて新しいバージョンをインストールしようとしないだろうという想定.

$ gem install signet -v=0.14.1

大丈夫そうでした.

その他

バージョンチェックのツリーをバージョン指定して確認できるといいかも.
あと Ruby のバージョンのチェックも可能にしてもいいかもな.と思った.

  gem.add_runtime_dependency "signet", "~> 0.14"

正直これが ~> 0.14.0 だったらなあ… とは思った

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1