https://hackmd.io/@mametter/mimemagic-info-ja
この文書はruby-jp Slackの#rails
チャンネルの議論を有志を中心にまとめたものです。
Railsの一部であるactivestorageが依存しているmimemagic gemが、ライセンス関連の問題でrubygems.orgから取り下げられました。これにより、mimemagic <= 0.3.5に依存しているRailsアプリがbundle installに失敗するようになりました。
mimemagic <= 0.3.5に依存している場合のエラーの例:
Your bundle is locked to mimemagic (0.3.5), but that version could not be found
shared-mime-infoがインストールされていない場合のエラーの例:
Could not find MIME type database in the following locations:
["/usr/local/share/mime/packages/freedesktop.org.xml", "/opt/homebrew/share/mime/packages/freedesktop.org.xml",
"/usr/share/mime/packages/freedesktop.org.xml"]
(2021/03/27現在)Rails 5.2.5 / 6.0.3.6 / 6.1.3.1 はmimemagicに依存しなくなりました。これらにバージョンアップしましょう。
https://weblog.rubyonrails.org/2021/3/26/marcel-upgrade-releases/
アプリケーションを配布する際のライセンスがGPLになっても構わない、あるいは他者に配布しないのでGPLのライブラリがあっても問題ないのであれば、mimemagicをアップデートして対応することも可能です。
互換性を重視して0.3系を使う場合は以下のようにします。
shared-mime-info
をインストールするbrew install shared-mime-info
apt-get install shared-mime-info
apk add shared-mime-info
gem "mimemagic", "~> 0.3.10"
といった記述を追加するbundle update mimemagic
を実行するmimemagicに依存しているactivestorageが不要なら外す手もあります。
MimeMagic.add
の使用例みたいなものrequire "mimemagic/overlay"
)ので、これを使っていなければ0.4系で問題ないと思われる"mimemagic", ">= 0.3.0"
になっているため、このgemを使用している状態で bundle update mimemagic
すると0.4系の最新版が入る場合がある。ただしCarrierWaveには現時点で0.4系では削除されているoverlay.rbに依存しているコードがあるため、強制的に0.3系を指定する必要がある。
gem 'mimemagic', '~> 0.3.0'
を追加して、0.3.x系を要求する。Railsと同じくCarrierWaveの次期バージョンでmimemagicへの依存が取り外されたら、この指定も削除してmimemagicをインストールしないようにすると良い。https://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.ja.html#GPLRequireSourcePostedPublic より引用
GPLでは、あなたが改変した版をリリースすることは要求してはいません。改変を加えて、リリースせずに個人的に使うのはあなたの自由です。これは組織(企業を含む)でも同様で、ある組織は、改変した版を用意してそれを組織外にリリースすることなく内部的に利用することができます。
しかし、もしあなたが改変された版を何らかの形で公にするならば、GPLはあなたが改変したソースコードをユーザがGPLのもとで入手できるようにすることを要求します。すなわち、GPLは改変されたプログラムを特定のやり方でリリースする許可を与えていますが、別の形でのリリースは許可していないのです。しかし、リリースするかどうかはあなた次第です。
https://rubygems.org/gems/mimemagic/versions
参考
marcelのmime type判定の挙動が一部変わっているので注意
https://sasa5740.hatenablog.com/entry/2021/03/29/223635
marcelでissueが上がっており、marcelのmimemagic外しの対応を行ったメンテナが反応しているのでそのうち修正されるかも。
https://github.com/rails/marcel/issues/35
mimemagic に依存しなくなった rails 5.2.5 に CSRF トークンのフォーマットが Urlsafe Base64 になる変更が(意図せず?)入っているようで 5.2.5 で生成されたセッションが 5.2.4.x 以下 or 6.0.x で読めなくなってしまっているようなので rails 5.2.5 と 6.1.x 以外の rails を組み合わせて使っている人は要注意です。