ActiveStorage使ってみた
TECH::CAMPでプログラミングを勉強し始めて、15週目。
いよいよ来週から最終課題か・・
今週いっぱいは、個人の勉強に当てるということで
個人アプリをherokuにデプロイしたところ、
なんと、herokuって一定期間しか画像が保存されないんですね・・(投稿画像のこと)
ということで外部ストレージを使用しようと、
応用課題で使用したS3を使用することにしたのですが
carrierwaveやらfogやらとの連携がうまくいかない。
どうしたもんかと考えていると、
rails5以降は、「Activestorage」という画像アップロード機能が備えられていると言う事!!
一回使ってみよう!
AcriveStorageのインストール
まずは、ある程度アプリができている前提で、ActiveStorageをインストールします。
$ rails active_storage:install
$ rails db:migrate
この2つのコマンドを打つ事で、
ActiveStorageによる画像保存用テーブルと、画像と他のモデルを紐づける中間テーブルが出来上がります。
他のモデルと紐付け
今回は、投稿(post)モデルと紐付けます。
model/post.rbに
と記載します。
今回は1枚の画像だけですが、
もしいくつも添付する場合は
と言うふうに書きます。
ビューの編集
フォームは通常通り書きます。
投稿一覧ページです。
ポイントは、
です。「.attached?」と言うふうに記載します。
保存先フォルダの変更
producition.rb
:trueとなっているのを:amazonに変更しました。
もし開発環境でもS3に保存するなら、
developmentの方も上記と同様に設定してもいいかと思います。
storage.yml
test: とlocal: はそのままでOK
regionとバケット名を記入します。
AWS S3に必要なgemをダウンロードします。
下記コマンドで、エディタを開きます。
EDITOR=vim rails credentials:edit
iと打ち込むと入力開始。
aws: access_key_id: 123 #自分のアクセスキーIDに書き換える secret_access_key: 456 #自分のシークレットアクセスキーに書き換える
esc → :wqで終了。
herokuの方にも上記idと、rails masterkey,バケット名、regionを渡せば
S3に保存できました。