【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】RSpecを使った自動テスト《システムスペック編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 17:07
【Rails】RSpecを使った自動テスト《リクエストスペック編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 16:06
【Rails】RSpecを使った自動テスト《コントローラースペック編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 15:39
【Rails】RSpecを使った自動テスト《モデルスペック編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 11:50
【Rails】RSpecを使った自動テスト《基本編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月10日 17:49
【Rails】デザインパターン「Concern」の基本情報と実装方法
# はじめに Ruby on RailsなどのMVCフレームワークで構築したWebシステムにはアンチパターンというものが存在します。システム開発におけるアンチパターンとは、避けるべき悪い設計や実装方法のことを指します。 MVCフレームワーク [...]
2024年7月10日 13:32
【Rails】デザインパターン「Form Object」の基本情報と実装方法
# はじめに Ruby on RailsなどのMVCフレームワークで構築したWebシステムにはアンチパターンというものが存在します。システム開発におけるアンチパターンとは、避けるべき悪い設計や実装方法のことを指します。 MVCフレームワーク [...]
2024年7月6日 22:50
【Rails】デザインパターン「Service Object」の基本情報と実装方法
# はじめに Ruby on RailsなどのMVCフレームワークで構築したWebシステムにはアンチパターンというものが存在します。システム開発におけるアンチパターンとは、避けるべき悪い設計や実装方法のことを指します。 MVCフレームワーク [...]
2024年7月6日 19:59