Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What is going on with this article?
@KKDDD

【2つの解決法】rails コマンドのエラーincompatible library version ~~~~~(LoadError)

環境
ruby 2.7.0
Rails 5.2.0

突然rails コマンドが動かなくなりました。

今回ですと常に下記のエラーが付き纏います。

incompatible library version - /Users/shogo/environment/insta-clone/vendor/bundler/ruby/2.6.0/gems/msgpack-1.3.1/lib/msgpack/msgpack.bundle (LoadError)

msgpackかと思い、調べてみたのですがなかなか見つからず。

incompatible library version で検索しても見つからず。

原因:incompatible library version(ライブラリの互換性)

incompatible=互換性という意味になります。

library version=ライブラリのバージョンです。

つまりディレクトリ(現在作業しているアプリ)で使っているrubyのバージョンとgemに互換性がないから

・エラーでてるgemを削除しろ
・またはrubyのバージョン上げろ
・またはrubyのバージョン下げろ

って話。

下記記事をみつつ、バージョンを上げたり下げたりしてみましょう。
https://qiita.com/pipi_taro/items/9c9a6ccc110b159b967b

ローカル環境のrubyを使っている際(つまりエラーでてるアプリにインストールされているrubyとローカル環境で設定しているrubyのバージョンが異なる場合)には、パス指定でうまくいく可能性もありますね。

パス指定する

[[ -d ~/.rbenv  ]] && \
export PATH=${HOME}/.rbenv/bin:${PATH} && \
eval "$(rbenv init -)"

which rubyでパスが変更したか確認する

/Users/shogo/.rbenv/shims/ruby

エラー文にmsgpackと記載してあるのに、原因は互換性の問題らしい。非常にわかりにくい。

原因②:bundle installをする際にパスを指定していない

原因1では解決しなかったので、エラー文をもう一度みると

~vendor/bundler/ruby/2.6.0/gems/msgpack-1.3.1/~

ruby/2.6.0と書いてあります。
実際にアプリ内で使用しているバージョンは2.7.0です。

実際にvendor/bundler/rubyをみてみると、
image.png

2.6.0と2.7.0があるわけですね。

とりあえずバージョンがずれているので下記記事をみつつ、bundleinstallする際にパスを指定することにしました。
https://qiita.com/okuramasafumi/items/1aea3ed27763315328a3

$ bundle install --path vendor/bundle

そしてrails sが成功。

どうやら--pathオプションをつけるのは開発時においては必要ないが、異なるバージョンのgemが混ざるのが嫌な人はつけた方が良いとのこと。

プロジェクト下のディレクトリ(例えばvendor/bundle)にgemをインストールすることで、グローバルにインストールされたgemと、bundlerが管理するgemを分離することと書いてあります。

要はrubyのインストールでいうlocal設定とglobal設定と分けることによって作業するディレクトリによってrubyのバージョンを変えられますよ的な話に近しいものだということだと思います。(もう少し理解できれば書き加えます。)

もうちょいわかりやすいエラー文にして欲しいところ。

なぐり書きなので疑問がありましたらコメントください。

こちらに移行しました。
http://code-aim.work/incompatible-library-version/

9
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
KKDDD
ruby/rails/nuxt.js/gas/aws/firebase

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
9
Help us understand the problem. What is going on with this article?