読者です 読者をやめる 読者になる 読者になる

カッパでも分かるiOSアプリゲーム開発

カッパがひたすらゲーム制作に関することを書くブログです。Railsに関するTipsもたまにまとめてます。

heroku で本番運用してたら画像が消えた!! という場合の解決方法

heroku Rails
スポンサードリンク

プロフェッショナルのための 実践Heroku入門 プラットフォーム・クラウドを活用したアプリケーション開発と運用 (書籍)
f:id:InvokeTwoA:20151023183618p:plain「herokuで本番運用してたら、アップロードしてた画像が突然消えてしまったーーーー!」
f:id:InvokeTwoA:20151215172640p:plain「誰もが一度はハマる落とし穴……」
{{toc}}

なんで画像が消えちゃったの?

f:id:InvokeTwoA:20151023183618p:plain「herokuの仕様で、サーバーの再起動と共にpublic以下の余計なファイルは消されてしまう……」
f:id:InvokeTwoA:20151215172640p:plain「ほげえええええええ」
f:id:InvokeTwoA:20151023183618p:plain「local環境で画像アップロードがうまくいったからと安心してはいけないんだよ」
f:id:InvokeTwoA:20151215172640p:plain「本番反映直後は画像アップロードがうまく機能して見えるところも罠ですな」

消えた画像は取り戻せない?

f:id:InvokeTwoA:20151023183618p:plain「無理だったよ……失われた画像は戻らないんだよ」
f:id:InvokeTwoA:20151215172640p:plain「そ、そんなー!!!」

下記のwikiでユーザーがアップしてくれた画像が消えてしまい、猛烈に謝る事になりました。
www.orehata-wiki.xyz

herokuで画像を扱うにはどうすれば良いの?

f:id:InvokeTwoA:20151023183618p:plain「素直に画像サーバーを用意するしかないね」
f:id:InvokeTwoA:20151215172640p:plain「s3とか使わないと無理かー」

ちなみにカッパは redmine を使ってたので redmine_s3 なる js のプラグインを入れて s3 にアップロードしました。

//= require redmine_s3
  • あと config/s3.yml に画像サーバーの情報を設定
production:
  access_key_id: <%= ENV['S3_ACCESS_KEY'] %>
  secret_access_key: <%= ENV['S3_SECRET_KEY'] %>
  bucket: <%= ENV['S3_BUCKET'] %>
  endpoint: s3-ap-northeast-1.amazonaws.com
  • herokuで配信する関係上git にプッシュする必要があるので、access_key_id や secret_access_key は環境変数でセットしておくと良い

画像サーバーにファイルがアップロードされる事を確認すれば終了

f:id:InvokeTwoA:20151023183618p:plain「ふー。さすがに独立した画像サーバーならば、勝手にファイルが消される事もない」
f:id:InvokeTwoA:20151215172640p:plain「herokuで誰もがハマる案件なのでもっと注意喚起があっても良さそうなのになー」