carrierwave、cloudinaryで画像の保存
Ruby(Rails)、CarrierWave、cloudinary、Herokuでユーザー画像の登録、変更を行おうとしています。
開発環境(storage:file)ではうまくいったのですが、Herokuにあげたところ「登録ボタン」を押したところで詰まってしまいました。
Heroku logs —tailで確認したところ、タイトルのエラーがでてきました。
発生している問題・エラーメッセージ
2019-09-16T11:31:56.239436+00:00 heroku[router]: at=info method=POST path="/users/1" host=s-labo.herokuapp.com request_id=60099362-dc59-4b25-93a8-a898cf9e1b58 fwd="106.154.133.151" dyno=web.1 connect=0ms service=211ms status=500 bytes=1827 protocol=https 2019-09-16T11:31:56.232616+00:00 app[web.1]: [60099362-dc59-4b25-93a8-a898cf9e1b58] Started PATCH "/users/1" for 106.154.133.151 at 2019-09-16 11:31:56 +0000 2019-09-16T11:31:56.233369+00:00 app[web.1]: [60099362-dc59-4b25-93a8-a898cf9e1b58] Processing by UsersController#update as HTML 2019-09-16T11:31:56.233485+00:00 app[web.1]: [60099362-dc59-4b25-93a8-a898cf9e1b58] Parameters: {"utf8"=>"✓", "authenticity_token"=>"tj2LhOfRFuWpTgXKX6gz5Ox4e8a6KZgBmmrB+IQ2b5nkMYqk7Izm4h9f7KiwXrvFpISiiP4qnwd9b9MWXjIwHw==", "user"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x0000558e8d1642b8 @tempfile=#<Tempfile:/tmp/RackMultipart20190916-4-jvq7mb.png>, @original_filename="wonderful-minimalist-wallpaper-2560x1600.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"user[image]\"; filename=\"wonderful-minimalist-wallpaper-2560x1600.png\"\r\nContent-Type: image/png\r\n">, "image_cache"=>"", "name"=>"testテスト", "introduce"=>"自己消火器"}, "commit"=>"登録", "id"=>"1"} 2019-09-16T11:31:56.237144+00:00 app[web.1]: [60099362-dc59-4b25-93a8-a898cf9e1b58] User Load (1.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] 2019-09-16T11:31:56.238743+00:00 app[web.1]: [60099362-dc59-4b25-93a8-a898cf9e1b58] (1.0ms) BEGIN 2019-09-16T11:31:56.241253+00:00 app[web.1]: [60099362-dc59-4b25-93a8-a898cf9e1b58] (1.0ms) ROLLBACK 2019-09-16T11:31:56.241644+00:00 app[web.1]: [60099362-dc59-4b25-93a8-a898cf9e1b58] Completed 500 Internal Server Error in 8ms (ActiveRecord: 3.2ms) 2019-09-16T11:31:56.242161+00:00 app[web.1]: [60099362-dc59-4b25-93a8-a898cf9e1b58] 2019-09-16T11:31:56.242190+00:00 app[web.1]: [60099362-dc59-4b25-93a8-a898cf9e1b58] NotImplementedError (Need to implement #cache! if you want to use Cloudinary::CarrierWave::Storage as a cache storage.):
該当のソースコード
image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base include CarrierWave::RMagick if Rails.env.production? include Cloudinary::CarrierWave else storage :file end def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end
edit_form.html.erb
<%= form_with(model: @user, local: true) do |f| %> <div class="row"> <div class="offset-lg-1 col-lg-4"> <%= render 'layouts/error_messages', model: f.object %> <div class="form-group"> <div class="card"> <div class="card-header"> <%= f.label :image, 'クリックで画像変更' %> <div id="img_field" onClick="$('#file').click()" > <% if @user.image.url.present? %> <%= image_tag @user.image.thumb.url, :size =>'180x150' %> <% else %> <%= image_tag 'no_image.jpg', :size =>'180x150' %> <% end %> </div> <%= f.file_field :image, class: "image", style: "display:none;", id: "file" %> <%= f.hidden_field :image_cache %> </div> </div> </div> </div> <div class="col-lg-6"> <div class="form-group"> <%= f.label :name, '名前' %> <%= f.text_field :name, class: 'form-control' %> </div> <div class="form-group"> <%= f.label :introduce, '自己紹介' %> <%= f.text_area :introduce, rows: 5, class: 'form-control' %> </div> </div>
試したこと
一度、上記のimage_uploaderの中からinclude Cloudinary::CarrierWaveだけを残し、ほかをコメントアウトした上でローカル環境で試してみましたがうまくいきませんでした。
image_cacheが渡っていないのかと思い、strong parameterを変更しましたがうまくいきません
def user_params params.require(:user).permit(:name, :email, :introduce, :password, :password_confirmation, :image, :image_cache) end
ローカル環境でも同様に
Need to implement #cache! if you want to use Cloudinary::CarrierWave::Storage as a cache storage.
と表記されました。cacheに関わる部分を実装するのかとは思うのですが、どこに何を実装すればよいのかわかりません。
追記
Completed 500 Internal Server Errorに注目し、文法ミスかと思いfoamやコントローラも見直しました。
Storage:fileでは保存できたので、cloudinaryの設定かとも思いましたが、その場合どこを操作すれば良いのかわかりませんでした。
補足情報(FW/ツールのバージョンなど)
ruby '2.5.3'
gem 'rails', '~> 5.2.2'
gem 'cloudinary'
gem 'carrierwave'
gem 'rmagick'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/20 22:41
2019/09/21 00:15