Techioz Blog

私の Ruby と互換性のある nokogiri のバージョンはありません

概要

GitHub から 2017 Rails プロジェクトをインストールしています。プロジェクトを複製する前に、まず Ruby と Rails をインストールする必要があると理解しています。このプロジェクトでは Ruby 2.4.1 と Rails バージョン 5.0.1 を使用しているため、これらを特別にインストールしようとしています。私は Linux Mint Cinnamon の最新バージョンを使用しています。

openssl で苦労した後、RVM を使用して Ruby 2.4.1.p111 をインストールすることに成功しました。その前に、ruby-langに従ってRubyをインストールする他のすべての方法を(文字通り)試しましたが、過失により失敗しましたが、次に進む前に、失敗したインストール/マネージャーアプリをそれぞれ削除しました。したがって、現在は RVM のみが存在します。

現在、RVM も使用して Rails 5.0.1.rc1 をインストールしようとしています。

2017 年のインストールノートから、最初に sudo apt-get install Nodejs を実行しました。

次に、(グローバル gemset 内にあると仮定して) gem install -Vrails –version=5.0.1.rc1 を実行します。

これにより、互換性のないraccに関するエラーが発生しましたが、エラーで示唆されているように解決しました。

gem install racc -v 1.5.2

今回は、rails install を再度実行しました。

ERROR:  Error installing rails:
    The last version of nokogiri (>= 1.6) to support your Ruby & RubyGems was 1.10.10. Try installing it with `gem install nokogiri -v 1.10.10` and then running the current command again
    nokogiri requires Ruby version >= 2.7, < 3.3.dev. The current ruby version is 2.4.1.111.

そこで、提案に従って nokogiri -v 1.10.10 をインストールし、再試行しましたが、エラーが発生しました。

HEAD https://rubygems.org/api/v1/dependencies
404 Not Found
GET https://rubygems.org/prerelease_specs.4.8.gz
200 OK
GET https://rubygems.org/specs.4.8.gz
200 OK
...
/usr/share/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.1/lib/active_support/xml_mini/nokogiri.rb
/usr/share/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.1/lib/active_support/xml_mini/nokogirisax.rb
/usr/share/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.1/lib/active_support/xml_mini/rexml.rb
Successfully installed activesupport-5.0.1
ERROR:  Error installing rails:
    There are no versions of nokogiri (~> 1.14) compatible with your Ruby & RubyGems. Maybe try installing an older version of the gem you're looking for?
    nokogiri requires Ruby version >= 2.7, < 3.3.dev. The current ruby version is 2.4.1.111.

次に、Rails 5.0.1 用の gemset を次のように作成してみました。

rvm gemset create rails501
rvm 2.4.1@rails501
gem install rails -v 5.0.1.rc1

しかし、同じエラーが発生しました。私は 1 日半かけて調査し、文字通り壊れてしまった古い Linux マシンの修理を予約するために修理店に電話しました。新しいラップトップでプロジェクトに取り組むことを望んでいました。古いラップトップを修理に持ち込むのを待っている間、研究を続けています。

現在、これは 2.4.1@rails501 gemset の gem リストです。

gem query --local

*** LOCAL GEMS ***

activesupport (5.1.0)
bigdecimal (default: 1.3.0)
bundler (default: 1.17.3)
bundler-unload (1.0.2)
concurrent-ruby (1.2.2)
did_you_mean (1.1.0)
executable-hooks (1.6.1)
gem-wrappers (1.4.0)
i18n (0.9.5)
io-console (default: 0.4.6)
json (default: 2.0.2)
mini_portile2 (2.1.0)
minitest (5.10.1)
net-telnet (0.1.1)
nokogiri (1.7.2)
openssl (default: 2.0.3)
power_assert (0.4.1)
psych (default: 2.2.2)
racc (1.5.2)
rake (12.0.0)
rdoc (default: 5.0.0)
rubygems-bundler (1.4.5)
rvm (1.11.3.9)
test-unit (3.2.3)
thread_safe (0.3.6)
tzinfo (1.2.11)
xmlrpc (0.2.1)

解決策

Rails であっても、依存関係を自分でインストールする必要はありません。また、試みるべきではありません。あまりにも多すぎるため、プロジェクトで動作しないバージョンをインストールする可能性があります。

プロジェクトには、プロジェクトで動作することがわかっている正確な依存関係を含む Gemfile.lock ファイルが必要です。プロジェクトで許可されている可能な最新バージョンの Ruby をインストールします (Ruby 2.4 または 2.4.1 が必要な場合は、2.4.8 をインストールします。これは 2.4.1 と同じですが、バグが修正されています)。

次に、リポジトリのクローンを作成し、bundler install を使用して依存関係を Bundler にインストールさせます (Bundler のインストールが必要な場合があります)。これは、Gemfile.lock を使用して、プロジェクトと連携して動作することがわかっている依存関係の正確な組み合わせをインストールします。

Bundler の詳細については、「Bundler を使用してアプリケーションの依存関係を管理する方法」を参照してください。