背景
私は普段Railsのアプリ開発でDockerではなくローカル上のrbenvから起動しているので遭遇しなかったのですが、最近フロントの業務委託の方からセットアップ時に ActiveStorage::IntegrityError
が出て作業が進められないという連絡があり、調査することになりました。
原因
Rails ActiveStorage IntegerityError Docker
といったワードで検索したところ、まず最初にこちらのサイトが見つかりました。ここにあるgithubのissueを見たところ、どうも原因はDocker for Macのバグ?ということでした。
(一時的な)解決方法
いくつかあったのですが、手っ取り早い方法をいくつか
1. Docker for Macのダウングレード
先程のサイトにもあるように、とりあえずDocker for Macを3.2.2にダウングレードするのが手っ取り早いと思います。ただ「ダウングレードするのはちょっと・・・」という方は次の方法を試すと良いかもしれません。
2. TMPDIR
の設定
こちらにあるように、一旦TMPDIR
を/tmp
から/app/tmp
等に変更する方法です。docker-composeを使っているのでしたら以下のようにenvironment
を設定することで簡単にできます。
version: "3"
services:
rails:
environment:
TMPDIR: /app/tmp
しかし、もちろんこの方法には TMPDIR: /app/tmp
という余計な記述をコミットしてしまうというリスクがあります。ただフロントエンドのみを開発する方などはそのレポジトリ上でgit操作をすることもないので、そういう方にはおすすめかもしれません。また、このように手元のローカル上でのみ docker-compose.yml
ファイルを上書きするのもアリかもしれませんね。
まとめ
完全に一時対応ではありますが、私の周り以外でも困っている方がいるかもしれないのでメモとして投稿しました。早めに根本的な原因のバグが直ると良いですね。もし他にもこういう良い方法があるとか、もうすでにこの構成だとそんな対応しなくても大丈夫とか、何か情報がありましたらぜひ教えてください。