質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

792閲覧

Need to implement #cache! のエラーに困っています。

dean

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/09/16 13:22

編集2019/09/18 13:49

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'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

最新の carrierwave, cloudinary のバージョンの兼ね合いでの問題があるかもしれません。

ruby

1gem 'carrierwave', '~> 1.3.1' 2gem 'cloudinary' , '1.11.1'

gemfileの記述を変えてbundle installすれば解決できる可能性があります。
上記を実行する場合、

ruby

1if Rails.env.production? 2 include Cloudinary::CarrierWave 3else 4 storage :file 5end

質問者様のコードのままで大丈夫かと思います。

当方、学習中の初心者で大変恐縮ですが、同じようなエラーが出た経験があり、上記の方法で解決したため、回答させて頂きました。
一度、ご確認頂ければと思います。

投稿2019/09/20 20:22

atsunori198011

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dean

2019/09/20 22:41

ご回答ありがとうございます! バージョンを変更してみたところ、「Need to implement #cache!」はなくなったのですが、URI::InvalidURIError in UsersController#update」が出てしまいました。 もし何かお分かりになることがあれば教えていただきたいです。
dean

2019/09/21 00:15

失礼しました。他サイトを参考に作ったcloudinary.rbの環境変数が邪魔していたのでコメントアウトしたところ解決しました。 数日悩んでいたことがようやく一歩進みました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問