🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
rbenv

rbenvは、Rubyバージョン管理ツール。プロジェクトごとでRubyバージョンを切り替えることが可能です。RVMよりもシンプルで、少ない機能で動作します。本体にはRubyのビルド機能は備わっておらず、ruby-buildというツールを用いる必要があります。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Q&A

解決済

4回答

3215閲覧

「incompatible library version」の根本原因・解決策

Hanbe.T

総合スコア36

rbenv

rbenvは、Rubyバージョン管理ツール。プロジェクトごとでRubyバージョンを切り替えることが可能です。RVMよりもシンプルで、少ない機能で動作します。本体にはRubyのビルド機能は備わっておらず、ruby-buildというツールを用いる必要があります。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

0グッド

0クリップ

投稿2020/12/20 06:12

編集2020/12/20 06:58

発生事象

  • Rail6にて、rails serverを実行するとincompatible library versionが発生する
  • 発生しているgemを解決しても別のgemにて同様の問題が発生する
/Users/MyUser/.rbenv/gems/2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require': incompatible library version - /Users/MyUser/.rbenv/gems/2.6.0/gems/nokogiri-1.10.10/lib/nokogiri/nokogiri.bundle (LoadError)
/Users/MyUser/.rbenv/gems/2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require': incompatible library version - /Users/MyUser/.rbenv/gems/2.6.0/gems/bindex-0.8.1/lib/skiptrace/internal/cruby.bundle (LoadError)

環境

使用している環境は以下の通りです。

バージョン
OSmacOSCatalina10.15.17
管理ツールRubyrbenv1.1.2
gemRubyGems3.0.3
Bundler2.2.2
RubyRubyglobal2.6.3
RailsRails6.0.3

問題発生までの手順

  • ※前提として、Railsチュートリアルにならって、作業を行なっています。
  1. mkdir environment
  2. cd environment
  3. rails _6.0.3._ new hello_app
  4. cd hello_app
  5. 以下のGemfileに置き換え
  6. bundle update
  7. bundle install
  8. bundle exec rails server

試したこと

最初にmsgpackにてincompatible library versionが発生しており、調べていたところ、以下を実行するとの記事があったため、実施しました。
(記事のURLを保存しておくのを忘れました。かなり検索の後のページにあった情報でした)

$ gem install msgpack

そうしましたら、msgpackでは発生しなくなり、別のgemで同様の問題が発生した次第です。

使用しているGemfile

Railsチュートリアルより抜粋

source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.6.3' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 6.0.3' # Use sqlite3 as the database for Active Record gem 'sqlite3', '~> 1.4' # Use Puma as the app server gem 'puma', '~> 3.11' # Use SCSS for stylesheets gem 'sass-rails', '~> 5' # Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker gem 'webpacker', '~> 4.0' # Turbolinks makes navigating your web application faster. # Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.7' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use Active Model has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use Active Storage variant # gem 'image_processing', '~> 1.2' # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.4.2', require: false group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a # debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do # Access an interactive console on exception pages or by calling 'console' # anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the # background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of web drivers to run system tests with browsers gem 'webdrivers' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

質問

以下に関して教えていただきたいです。

根本原因はなになのか?
  • 調べるとライブラリの互換性の問題とありましたが、gemコマンドにて直接インストールすると解決するのはおかしいのではないのか?
  • どこを確認すれば解決策にいたるのか?
上記であげた解決方法だとなぜ問題が解決するのか?
  • ひとつひとつ手動でインストールが必要になると何のためのbundlerなのか?

さいごに

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

ちょっと回答になっていない部分があったので、質問への回答を追記させていただきます。

根本原因はなになのか?

→gemのcacheだけが存在し、実体が存在しない状態

調べるとライブラリの互換性の問題とありましたが、gemコマンドにて直接インストールすると解決するのはおかしいのではないのか?

実体が存在しないため、gemコマンドにて直接インストールすると解決します。

どこを確認すれば解決策にいたるのか?

% gem environment

にて表示される INSTALLATION DIRECTORY の直下にあるcacheというディレクトリ内には存在するものの、gemsというディレクトリには存在しないgemが原因。そのため、cache内のgemをrm -rf等で削除した上でbundle installすると解決する。

なお、bundle installはおそらく(予想)このcacheからそのインストールしようとしているgemが存在するかどうかを判断しているため、cacheには存在するものの、実体ファイルが存在しない状態だとgemがインストールできない。その場合、明示的にgem install 〜としてインストールしてやると解決。もしくは、gem update --systemというコマンドはcacheからgemの実体を復元するコマンドのため、cacheと本体の差分を埋めることが出来るため、解決。

こちらが回答になります。
経験則のところも多く、公式ドキュメント等の文言ではないので正確性に欠ける部分あるかもしれませんが、よろしくお願いいたします。

投稿2020/12/27 07:38

educ_gt

総合スコア282

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hanbe.T

2020/12/30 12:41 編集

ご回答いただき、ありがとうございます。 いろいろと確認に手間取り、返信が遅くなってしまい、申し訳ありません。 > INSTALLATION DIRECTORY の直下にあるcacheというディレクトリ内には存在するものの、gemsというディレクトリには存在しないgemが原因 こちらを確認したところ、`cache`にファイルがあり、`gems`にも実体が存在しました。 しかし、内容を確認したところ、使用しているRubyのバージョンとコンパイル時に使用されたRubyのバージョンが異なっていました。 > gem install 〜 でエラーが違うgemのエラーへと変わったことから、実体ファイルを明示してinstallすれば解消されたのだと思います。 こちらも適切なバージョンで再コンパイルされるため、問題が解決してくいくということなのですね。 > 根本原因はなになのか? これは、「実行しているRubyのバージョンとコンパイルされた際のRubyのバージョンにずれているため、互換性がない」ということかと思います。 前提となる情報が誤っていたため、直接の解決方法ではありませんが、私が知りたかったこと、根本解決に繋がる助言であったことは間違いありません。 本当にありがとうございました。
guest

0

以下のアドバイスをいただき、実施(確認)した内容です。
https://teratail.com/questions/311371?whotofollow=#reply-436479
.rbenv/gems/2.6.0配下は正常な状態になってしまっているため、vendor/bundle配下にインストールするようにしました。
※また、事象の再現するために別バージョンにて実施した際に気づいたため、バージョンが提示したものと異なります

  1. bundle config set path 'vendor/bundle'
  2. rbenv global 2.6.4
  3. rbenv install 2.6.5
  4. mkdir tmp
  5. cd tmp
  6. rails _6.0.3_ new app1
  7. cd app1
  8. rbenv local 2.6.5
  9. bundle update※1
  10. bundle install
  11. cd ..
  12. rails _6.0.3_ new app2
  13. cd app2
  14. rm -rf vendor/bundle
  15. bundle update※1
  16. bundle install
  17. diff app1/vendor/bundle/ruby/2.6.0/gems/msgpack-1.3.3/ext/msgpack/Makefile app2/vendor/bundle/ruby/2.6.0/gems/msgpack-1.3.3/ext/msgpack/Makefile※2
15c15 < topdir = /Users/MyUser/.rbenv/versions/2.6.4/include/ruby-2.6.0 --- > topdir = /Users/MyUser/.rbenv/versions/2.6.5/include/ruby-2.6.0 17c17 < arch_hdrdir = /Users/MyUser/.rbenv/versions/2.6.4/include/ruby-2.6.0/x86_64-darwin19 --- > arch_hdrdir = /Users/MyUser/.rbenv/versions/2.6.5/include/ruby-2.6.0/x86_64-darwin19 20c20 < prefix = $(DESTDIR)/Users/MyUser/.rbenv/versions/2.6.4 --- > prefix = $(DESTDIR)/Users/MyUser/.rbenv/versions/2.6.5 34,35c34,35 < sitearchdir = $(DESTDIR)./.gem.20201230-73304-1slzs1n < sitelibdir = $(DESTDIR)./.gem.20201230-73304-1slzs1n --- > sitearchdir = $(DESTDIR)./.gem.20201230-3975-bfmw85 > sitelibdir = $(DESTDIR)./.gem.20201230-3975-bfmw85 54a55 > runstatedir = $(localstatedir)/run 89c90 < CPPFLAGS = -DHAVE_RUBY_ST_H -DHAVE_ST_H -DHAVE_RB_STR_REPLACE -DHAVE_RB_INTERN_STR -DHAVE_RB_SYM2STR -DHAVE_RB_STR_INTERN -DHAVE_RB_BLOCK_LAMBDA -DHAVE_RB_HASH_DUP -DHAVE_RB_HASH_CLEAR -I/Users/MyUser/.rbenv/versions/2.6.4/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags) --- > CPPFLAGS = -DHAVE_RUBY_ST_H -DHAVE_ST_H -DHAVE_RB_STR_REPLACE -DHAVE_RB_INTERN_STR -DHAVE_RB_SYM2STR -DHAVE_RB_STR_INTERN -DHAVE_RB_BLOCK_LAMBDA -DHAVE_RB_HASH_DUP -DHAVE_RB_HASH_CLEAR -I/Users/MyUser/.rbenv/versions/2.6.5/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags) 91,92c92,93 < ldflags = -L. -L/Users/MyUser/.rbenv/versions/2.6.4/lib -fstack-protector-strong -L/usr/local/lib < dldflags = -L/Users/MyUser/.rbenv/versions/2.6.4/lib -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress --- > ldflags = -L. -L/Users/MyUser/.rbenv/versions/2.6.5/lib -fstack-protector-strong -L/usr/local/lib > dldflags = -L/Users/MyUser/.rbenv/versions/2.6.5/lib -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress

※1 GemfileのRubyのバージョンを2.6.5にした後に
※2 binaryファイル間で差分あり

そもそも

そもそもrbenv rehashの実施漏れによってこのような事態になっていました。

投稿2020/12/30 13:18

Hanbe.T

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

gemの内部ファイルで読み込みエラーが生じている可能性が高いです。
おそらく、gemのcacheだけが存在する状況になっており、実体が存在しない状態かと思います。

gem install 〜 でエラーが違うgemのエラーへと変わったことから、実体ファイルを明示してinstallすれば解消されたのだと思います。

少々リスクもあるコマンドのため、自己責任で行っていただきたいですが、以下のコマンドで解消しそうです。

gem update --system

このコマンドはgemのcacheファイルから本体を一括で復元するコマンドです。

つまり、過去updateしたgemが存在する場合、その過去のバージョンも一緒に復元されてしまうのでdeprecation warningが出るようになってしまう可能性もあります。

ただ、今の問題を解決するには一番手っ取り早いと思います。

投稿2020/12/27 07:27

educ_gt

総合スコア282

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Gemfileの各行にversion指定がしてありますが、これらは 全てチュートリアルのままですか?
もしくはこのGemfileはどこかのサイトからコピーしたものをそのまま使っていますか。
もしそれでversion問題が起きたらチュートリアル(かcopy元)が間違えていますから、そのサイトにご注進してください。

もしどれかを変えていたら、それが混乱の原因です。

投稿2020/12/22 23:29

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hanbe.T

2020/12/24 05:59

回答いただきありがとうございます。 また、返信が遅れ、申し訳ありません。 > Gemfileの各行にversion指定がしてありますが、これらは 全てチュートリアルのままですか? もしくはこのGemfileはどこかのサイトからコピーしたものをそのまま使っていますか。 本文にリンクを貼っていますので、ご確認いただけると幸いです。 > もしそれでversion問題が起きたらチュートリアル(かcopy元)が間違えていますから、そのサイトにご注進してください。 今回お聞きしたかったのは、手順通りに行い、うまくいかず困っているの**ではなく**、この問題のトラブルシュートの方法が知りたかった次第です。 もちろんご指摘の通りの可能性もありますが、原因を突き止める前にそのような指摘をしても、「(私の)環境が悪いのでは?」と返されてしまう可能性の方がたかいと考えています。 せっかくご回答いただけたのに、申し訳ありません。 もし、他にも情報がありましたら、引き続きよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問