【Rails】mimemagicに依存しているRailsアプリでbundle installコマンドが失敗する事象の対処法

はじめに

Railsアプリでbundle installコマンドを実行しようとしたところ、以下のエラーメッセージが出力されコマンドに失敗しました。

Your bundle is locked to mimemagic (0.3.5), but that version could not be found
in any of the sources listed in your Gemfile. If you haven't changed sources,
that means the author of mimemagic (0.3.5) has removed it. You'll need to update
your bundle to a version other than mimemagic (0.3.5) that hasn't been removed
in order to install.

バンドルはmimemagic(0.3.5)にロックされていますが、そのバージョンはGemfileにリストされているソースのいずれにも見つかりませんでした。 ソースを変更していない場合は、mimemagic(0.3.5)の作成者がソースを削除したことを意味します。 インストールするには、バンドルをmimemagic(0.3.5)以外の削除されていないバージョンに更新する必要があります。

Ruby on Railsの機能のひとつであるActive StorageがmimemagicというGemに依存しています。そのmimemagicがGemfileに記述されているソース(rubygems.org)で見つからなかったとのことです。ソースは変更していないので、rubygems.orgからmimemagicが削除されたということになります。

原因

mimemagicを巡る問題については、経緯など含め以下のページにて詳しくまとめられています。

ライセンス関連の問題により、rubygems.orgからmimemagicが削除されてしまったことが原因のようです。

対処

mimemagicに依存しなくなったRails 5.2.5 / 6.0.3.6 / 6.1.3.1にバージョンアップすることによりbundle installコマンドが実行できるようになります。

GemfileのRailsを任意のバージョンに変更します。

Gemfile

gem 'rails', '~> 6.1.3.1'

以下のコマンドを実行します。

$ bundle update

【追記】

Rails 6.1.xにバージョンアップすると、image_tagを使用しているページで以下のようなエラーが発生するようになります。

Rendering 500 with excaption: undefined method `service_name' for #<ActiveStorage::Blob:0x000055f159e3c6f0>

このエラーは、Rails 6.1.xのActive Storageにservice_nameというカラムが追加されたことが原因です。このため、Rails 6.1.xへバージョンアップした後にrails app:updateを行い、マイグレーションを作成する必要があると説明されています。詳細はRails 6.1のリリースノートを参照してください。

しかし、上記のコマンドは既存カラムの配置変更も行うため、リスクがないわけではありません。そのため、単純にservice_nameだけを追加するマイグレーションを作成するの方法のほうが安全です。

$ rails active_storage:update

上記のコマンドを実行すると、2つのマイグレーションが作成されます。続いて以下のコマンドを実行します。

$ rails db:migrate

これでActive Storageにservice_nameが追加され、関連するエラーが発生しなくなりました。

まとめ

mimemagicを巡る問題は2021年3月頃から発生していたようです。今の今までbundle installコマンドを実行する機会がなかったので気づきませんでした。なお、Railsをバージョンアップしたくない場合の対処法については上記の記事を参照してください。

本記事を参考にしていただければと思います。

関連記事

【Rails】Railsアップグレードまとめ
# はじめに Ruby on Railsに限らず、何らかのフレームワークを使ってWebシステムを構築している場合、フレームワークのアップグレード作業は避けて通れません。 一般的にフレームワークはバージョン毎にEOL (End of Life [...]
2022年10月1日 14:32
【Rails】ユーザー登録時に行うメールアドレス認証機能の実装方法
# はじめに ユーザー登録/解除やログイン/ログアウトといった認証機能の導入に「devise」というGemを使っている人は多いと思います。「devise」では以下のように記述するだけで、ユーザー登録時に確認メールを送付しメールアドレス認証を行う機 [...]
2022年9月24日 14:24
【Rails】モデルに列挙型(enum)を定義し、使いこなす方法
# はじめに Railsはモデルでカラム名と同名の列挙型(enum)を定義することで、カラムと列挙型の変数を紐付けることができます。カラムと列挙型の変数を紐付けると、カラムに対して様々な便利な使い方ができるようになります。 本記事では、モデ [...]
2022年9月3日 10:29
【Rails】RailsでCORSとPreflight requestの設定を行う方法
# はじめに RailsアプリをAPIサーバーとして構築するには、CORS (Cross-Origin Resource Sharing)と Preflight requestの設定を行う必要があります。APIサーバーは外部からの要求に対して処理 [...]
2022年8月27日 10:44
【Ruby】Bundlerを使ってRubyGemsを作成/公開する方法
# はじめに Bundlerを使ってRubyGemsを作成および公開する方法について説明します。Bundlerを使わずにRubyGemsを作成/公開する方法については以下の記事を参照してください。 <iframe class="hatena [...]
2022年7月12日 23:18
【Ruby】RubyGemsを作成/公開する方法
# はじめに RubyGemsを作成および公開する方法について説明します。Bundlerを使ってRubyGemsを作成する方法については以下の記事を参照してください。 <iframe class="hatenablogcard" style [...]
2022年7月11日 21:52
【Rails】M1チップ搭載MacでRuby on Railsの開発環境構築
# はじめに M1チップ搭載MacにRuby on Railsの開発環境を構築する手順を記載します。 - MacBook Air (M1, 2020) - macOS Monterey 12.3.1 # Homebrew ## [...]
2022年5月5日 11:56
【Rails】Rakeタスクの基本情報と作成・実行方法
# はじめに Railsには標準でRakeというGemが同梱されています。RakeはRubyで実装されたMake(UNIX系のOSで使用できるコマンド)のようなビルド作業を自動化するツールです。Ruby Make、略してRakeというわけですね。 [...]
2022年3月7日 22:12