【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】Paranoiaを使用した論理削除(ソフトデリート)
# はじめに Paranoiaは、Railsアプリケーションで論理削除(ソフトデリート)を実現するためのGemです。 論理削除は、データベースのレコードを物理的に削除するのではなく、削除フラグを設定することで「削除済み」とみなす方法です。こ [...]
2024年7月20日 21:33
【Rails】activerecord-multi-tenantを使用したマルチテナントアプリケーションの作成
# はじめに マルチテナントアプリケーションでは、複数の顧客(テナント)が同じアプリケーションを利用するため、データの分離が必要です。 activerecord-multi-tenantは、このようなマルチテナント環境をサポートするための便 [...]
2024年7月18日 16:50
【Rails】RubyとRailsにおけるattr_reader, attr_writer, attr_accessorの概念と使用方法
# はじめに RubyとRailsの開発において、`attr_reader`,`attr_writer`,`attr_accessor`は非常に便利なメソッドです。これらは、クラス内でインスタンス変数に対するゲッターおよびセッターメソッドを簡単に [...]
2024年7月17日 18:11
【Rails】RubyとRailsにおけるyieldの概念と使用方法
# はじめに RubyとRailsにおける`yield`は、メソッドやテンプレートの中で動的にコードブロックを実行する能力を提供し、これによってコードの再利用性と拡張性が大幅に向上します。本記事では、RubyとRailsにおける`yield`の概 [...]
2024年7月17日 13:15
【Rails】AASMを使用してオブジェクトの状態遷移を効率的に管理
# はじめに Railsアプリケーションにおいて、オブジェクトの状態管理は重要な課題の一つです。AASM (Acts As State Machine) gemは、複雑な状態遷移を効率的に管理します。本記事では、AASMの基本的な使い方を解説して [...]
2024年7月16日 18:00
【Rails】RSpec + Swagger + rswagでアプリケーションのAPIをテストおよびドキュメント化する方法
# はじめに Railsアプリケーションの開発において、APIのテストとドキュメント化は重要な要素です。 RSpecはテストフレームワークとして広く利用されており、SwaggerはAPIの設計とドキュメント化を支援します。これらを統合するr [...]
2024年7月16日 14:27
【Rails】mailcatcherを使用して開発環境でメール送信をテストする方法
# はじめに mailcatcherは、開発環境でのメール送信をキャプチャするためのツールです。ローカルで送信されたメールをブラウザ上で簡単に確認できるようにします。mailcatcherをRailsアプリケーションで使用する方法について説明しま [...]
2024年7月15日 16:37
【Rails】impressionistを使用してページビューやクリック数を追跡する方法
# はじめに impressionist Gemを使用してRailsアプリケーションでページビューやクリック数を追跡する方法について説明します。 # 実装方法 ## impressionist Gemのインストール まず、impre [...]
2024年7月15日 14:18