[Rails5.2]Heroku環境でCarrierwaveを使って画像をアップロードする

Rails

結論

  1. S3に画像をアップロード
    ・/(ルート)にtmpフォルダを作成
    ・作成したtmpフォルダにHerokuにアップロードしたい画像をアップロード
    ・アップロードした画像を公開する
     ※この方法だとURLを知られたら誰でもみれてしまうので、個人情報とかプライベートなものは注意。
  2. CLIでデータ作成
  3. tmp/にアップロードした画像を削除する

S3に画像をアップロード(わかりづらい部分だけ補足)

作成したtmpフォルダにHerokuにアップロードしたい画像をアップロード

S3へのマニュアルアップロードをすると下記のような画面になるが、自分の環境では何も変更せず、全て次へで大丈夫だった。

S3のマニュアルのアップロード

アップロードした画像を公開する

この処理をしないと、次のCLIからの操作で画像を取得できない。

画像ファイルの詳細ページで公開ボタン(赤枠の部分)で公開する

CLIでデータ作成

Rails consoleから、下記を実行すれば、アップロード完了

下記のテーブル構成
・user(has_many user_images)
・user_images(imageカラムでcarrierwaveで利用している)

user = User.find(1)
user_image = user.user_images.new
user_image.remote_image_url = [S3にアップロードしたオブジェクトURL]
user.save

環境・バージョンなど

あまり依存しないと思うが念のため記載

サーバー:Heroku
ストレージ:AWS S3
Rails:5.2.2
CarrierWave:1.3.1

思ったこと

Herokuは、ストレージの機能がないためすごく面倒。最後のスクリプトを利用すれば、ネットからの画像など取得できるので、この機能自体はすごく便利。

アップロード画面が不具合で動かない時や大量件数で何かをしないといけない時などに利用できる。

そういえば、公式には下記のように書いているのでCarrierWaveのバージョンをあげたい。Rails5.0だとCarrierWave1.3.1がダメとは書いていないから、そのまま放置してるけど。。。

Finally, restart the server to apply the changes.
As of version 2.0, CarrierWave requires Rails 5.0 or higher and Ruby 2.2 or higher. If you’re on Rails 4, you should use 1.x.

https://github.com/carrierwaveuploader/carrierwave

コメント