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

2021年12月12日 9:53

はじめに

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】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
【Rails】モデルに外部キーを設定する方法とよく起こるエラー内容について
# はじめに Railsでモデルに外部キーを設定する方法について説明します。 # モデルに外部キーを設定する ## リレーションシップ 今回は1つのブログ記事は複数のコメントを持つ1対多のリレーションシップを例に説明します。現在は` [...]
2022年2月10日 14:18
【Rails】Capybaraのfill_inメソッドを実行すると「既存レコードの内容+指定した内容」がセットされる事象の原因と対処【RSpec】
# はじめに RSpec + Capybaraを使用して、Railsアプリの統合テストを実装しています。とあるモデルの編集画面において、入力フォームの内容を書き換えた上で送信し、レコードが更新されることを確認します。 入力フォームの内容を書 [...]
2022年1月27日 21:22
【Rails】GitHubのセキュリティアラートで発見された脆弱性を解消する方法
# はじめに GitHubにはセキュリティアラートという機能があります。セキュリティアラートはリポジトリに含まれるライブラリやパッケージの脆弱性を定期的にチェックし、脆弱性のあるライブラリやパッケージが発見されたらアラートで知らせてくれるという機 [...]
2022年1月16日 10:36