何があった
- Progateのrailsレッスンで、画像をアップロードするやり方を習うんですが、それってFile.binwriteを使う方法なんですよ。
- で、普通にその機能を使って画像投稿掲示板みたいなのを作ってherokuにデプロイしてみると普通に画像のアップはできるんですよ。
- でも削除ができんのですよ。パーミッションエラーになる。ほんとはできるのかも分からんが、rails歴1ヶ月の俺は一旦保留に。
- もっと問題なのは、その後色々コードいじって再度herokuにデプロイすると、画像が全部消えてる。
- なんで消えるかというと、heroku上でbinwriteでpublicに画像を格納したとしても、それはgithub上に格納してる訳ではない→デプロイ時に、データベース以外はgithubのモノにまるっと置き換わっちゃうので消えちゃう→あーあ、という流れ。うまく説明できてるか?
- という訳で色々ググると、railsの場合、actieve storageという機能にAWSってやつのS3ってサービスを連携させるのが一般的なようで。
active storageとは
railsに組み込まれとる追加できる機能なんですがね、例えば、画像を初めてアップロードした際、専用のデータベースみたいなやつに「この画像はこのモデルのこのIDのやつですよ、あと画像データはここにあるっすよ」みたいな情報をこう、ちょちょいと自動で書き込んでくれるっていうのかね。あー駄目だ。解説記事とか見ないと、俺の理解の解像度ってこんなもんだわ。ま、いいや。
AWSのS3とは
AWSっていうのはアマゾン・ウェブ・サービスの略で、なんでもある、なんでもできるレンタルサーバーっぽいやつです。AWSのサービスの一つがS3というファイル置き場みたいなやつです。前項の「データはここにあるっすよ」の「ここ」を、S3に指定することができます。S3以外にGoogleとかも同じようなサービスをやってますが、ネット上の情報量がS3の方が多かったのでそっちにした。
※余談。非エンジニアからしたら、なんか数年前からAWSという文字をはてブとか本屋とか色んな場所で目にするようになって、当時は「え!みんな通販始めんの!すごい時代やん!」とかマジで思ってましたが、アマゾン潜入体験記みたいな本を買って読んでたら(前に読んだユニクロ潜入記がおもろかったので)AWSに触れてる箇所があって、あ〜、アマゾンのノウハウをうまいこと活かしてなおかつそれなりの収益を出していてすごいなあ、と思った記憶があります。
導入方法
全体感
これを読んでください。この通りにやったら突破できます。ただし、次項以降の「ハマりポイント」に注意してください。
https://qiita.com/hmmrjn/items/7cc5e5348755c517458a
ハマりポイント1
AWS周りで登録する箇所は下記URLを参考にしてください(つってもこれがまた完全に参考にできる訳でもないので微妙な所なんですが。AWS、マジでムズいって。Progateやったばかりの人間には酷ですよ。鋭意勉強中ですが、基本何書いてるか訳分からん状態)。上記qiitaの記事は2018年6月(これ書いてる時から5年も前)に書かれてますが、AWS周りの登録関係、死ぬほど画面が変わってるのでそこだけは止まりました。逆に言うと、それ以外は行けました。超感謝!
IAM周り
https://techtechmedia.com/terraform-tutorial/
アクセス権限周り
https://it-web-life.com/aws_s3_how_to_bucket_all_public/
感想
罠が多い。多すぎる。