【rails】Heroku rubygemsのバージョン対象外

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

Herokuにデプロイするとエラーが起こる

前回、スタックのバージョン変更後、新たなエラーが発生

備忘録としてエラー解消方法を残しておく


開発環境

ruby 2.7.7

Rails 6.0.6.1

MacOS sonoma14.5


エラー内容

Deploy Branchした際におきたエラー

-----> Building on the Heroku-20 stack
-----> Determining which buildpack to use for this app
 !     Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used.
			Detected buildpacks: Ruby,Node.js
			See https://devcenter.heroku.com/articles/buildpacks#buildpack-detect-order
-----> Ruby app detected
-----> Installing bundler 2.3.25
-----> Removing BUNDLED WITH version in the Gemfile.lock
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.7.7
-----> Installing dependencies using bundler 2.3.25
       Running: BUNDLE_WITHOUT='development:test' BUNDLE_PATH=vendor/bundle BUNDLE_BIN=vendor/bundle/bin BUNDLE_DEPLOYMENT=1 bundle install -j4
       Fetching gem metadata from https://rubygems.org/.........
       ffi-1.17.0-x86_64-linux requires rubygems version >= 3.3.22, which is
       incompatible with the current version, 3.1.6
       Bundler Output: Fetching gem metadata from https://rubygems.org/.........
       ffi-1.17.0-x86_64-linux requires rubygems version >= 3.3.22, which is
       incompatible with the current version, 3.1.6

 !
 !     Failed to install gems via Bundler.
 !
 !     Push rejected, failed to compile Ruby app.
 !     Push failed

前回Heroku-20に変更したところは解決できているが、別のエラーが発生


rubygemsのバージョンが足りない

chatGPTで翻訳すると

「ffi-1.17.0-x86_64-linuxはrubygemsバージョン3.3.22以上を必要としますが、現在のバージョンは3.1.6です」とのこと

(このエラーの解消に四苦八苦しました)


rubygemsはどこで変更できる?

Gemfileを見ても「rubygems」は書かれていない、けどたしかに「3.1.6」らしい

gem --version
# => 3.1.6

chatGPT先生に聞くと、Gemfileでバージョンを指定するものでもないらしい ↓

rubyのバージョンを変えず、Gemfileに書かずにrubygemsのバージョンのみ上げる方法を探す


rubygemsをバージョンアップ

ターミナル画面でrubygemsのバージョンを上げる

gem install rubygems-update -v 3.3.22

gem --version
# => 3.3.22

しかしこのままだとGitでは変更がないので、デプロイしても「現在のバージョンは3.1.6です」のまま

※このあと、以下のコマンドを実行するとコミットできるファイルが生まれることを知る

git add Gemfile Gemfile.lock

でもデプロイ結果は変わらず、「現在のバージョンは3.1.6です」のまま


Gemfileに書いてみる

コミットするため、VScodeを変更したい

ということで、Gemfileに書いて反映をさせてみる

gem 'rubygems-update', '3.3.22'
bundle update --ruby

gem --version
# => 3.3.22

でもデプロイ結果は変わらず、「現在のバージョンは3.1.6です」のまま

デイトラでチャット質問したところ、Gemfileからrubygemsの記載は削除するようアドバイスがあり、こちらは早々に削除しました


いろいろ試しても、ターミナル画面でのバージョン≠デプロイ時のバージョンとなる

Herokuでは、Rubygemsのバージョンはrubyのバージョンに依存するという記載もどこかで見たので、ruby 2.7.7のままならRubygemsはなにをしても3.1.6のままなのでは・・?

(どこで見たかは、もう見つけられない)

手詰まりになる


解決方法

ffiのバージョンを下げる

エラー文から「which is incompatible with the current version, 3.1.6」をそのままGoogle検索

そこで見つけた記事を参考に、Gemfileに以下を書き加えることでffiを下げてみる

(記事リンクがなぜか埋め込めませんでした)

gem "ffi", "< 1.17.0"

デプロイするとrubygemsに関するエラーは消え、解決!!

#DAY26