LoginSignup
1
1

Magick::ImageMagickError: cache resources exhausted の対応方法(Heroku)

Posted at

趣旨

今回はエラー対処したメモとして記事を書きます

エラー内容

Magick::ImageMagickError: cache resources exhausted 

原因:画像変換時のキャッシュリソースの不足でエラー

環境

  • Heroku
  • マイクロサービスアーキテクチャー
    • api(Rails)
    • front

背景

Herokuアプリで本番運用始めたらエラー発生!
Sentryを入れてたおかげで気づけた Magick::ImageMagickError のエラーが発生している
(本番運用の実際の大きいデータを入れてみて気づきました。。。)

エラーを調べるとpolicy.xmlを修正したら良さそう。。
けどローカルでの修正方法のみで、viで直に修正しろとか書いてました(Heroku上ではできない)

imagemagickの公式ドキュメント

Heroku側の設定方法

対応方法

①Herokuのセッションを開始

heroku ps:exec -a あなたのアプリ名

②現在のpolicyを確認

$ convert -list policy

実際の結果

Path: /etc/ImageMagick-6/policy.xml
  Policy: Resource
    name: disk
    value: 1GiB
  Policy: Resource
    name: map
    value: 512MiB
  Policy: Resource
    name: memory
    value: 256MiB
  Policy: Resource
    name: area
    value: 128MB
  Policy: Resource
    name: height
    value: 16KP
  Policy: Resource
    name: width
    value: 16KP
  Policy: Delegate
    rights: None

ファイルを作成する必要があるので、現在のファイルを見に行く

$ cat /etc/ImageMagick-6/policy.xml

③Herokuのオーバーライト用の設定ファイルを作成

api配下に .magick/policy.xml を作成

policy.xml
<policymap>
  <!-- memoryエラー対象用として1GiBにアップデート -->
  <policy domain="resource" name="memory" value="1GiB"/>
  <policy domain="resource" name="map" value="512MiB"/>
  <policy domain="resource" name="width" value="16KP"/>
  <policy domain="resource" name="height" value="16KP"/>
  <policy domain="resource" name="area" value="128MB"/>
  <policy domain="resource" name="disk" value="1GiB"/>
  <policy domain="delegate" rights="none" pattern="URL" />
  <policy domain="delegate" rights="none" pattern="HTTPS" />
  <policy domain="delegate" rights="none" pattern="HTTP" />
  <policy domain="path" rights="none" pattern="@*"/>
  <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/>
</policymap>

④環境変数の設定

heroku config:set MAGICK_CONFIGURE_PATH=/api/.magick -a あなたのアプリ名

apiを設定したのは、マイクロサービスアーキテクチャーに対応し
api配下にファイルを置いたことに対応するため。

終わりに

対応は難しくなかったけども
こんな記事が2時間前にあればもっと困らなかった。。
僕のように時間を費やす人を少なくするため、ここにメモします!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1