はじめに
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をバージョンアップしたくない場合の対処法については上記の記事を参照してください。
本記事を参考にしていただければと思います。