BNBのプログラミング勉強記録

ガチのプログラミング初心者が駆け上がっていくブログ

railsで画像投稿機能を作ってherokuにデプロイする人へ

結論

railsのactieve storageという機能を使い、それにAWSのS3を連携させればできます

何があった

  • 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/

ハマりポイント2

credentialをいじる箇所でおれがハマった部分があります。YAMLという設定ファイルなのですが、これ、書き方が厳密なので。半角スペース2つなのは色んなサイトに書いてるので覚えていたのですが、コロンのあとにスペースがないと、ハマります。まあ、「yaml 書き方」でググらなかった俺が悪いんですがね。ちなみにハマって具体的にどうなるかというと、herokuで環境変数を設定するとデプロイ後に動かなくなります(設定を消すと動く)。「環境変数マスターキーが指定した先のcredentialにs3の鍵が入ってないぞ〜お〜いどこだ〜どこに隠れとる〜?」状態になるので。マジで注意。

ハマりポイント3

Progateでrailsやったばかりの人、scaffoldの存在知らんでしょ。S3導入時は、scaffoldをググってある程度理解した上で、rails g scaffold〜で始めてください。active storageとs3でググってるとそれを基準に書いたviewとコントローラーばかり引っかかるので、「何これ」状態になること間違いなしです。

感想

罠が多い。多すぎる。