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

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

ただいまの
回答率

90.76%

  • Ruby on Rails 5

    1293questions

  • Heroku

    765questions

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

【rails 5】herokuでformから画像をアップロードできない cloudinary+carrierwave+RMagick(修正版)

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 255

seen

score 39

rails+herokuにて本番環境では画像を保存できないということでcloudinaryを使おうとおもっているのですが、formから投稿した画像がcloudinaryに反映、アップロードされません。

現状herokuからcloudinaryをセットアップして、静的な目的で/assets/images以下に置いていた画像ファイルは手動でcloudinaryにアップロードしたことによりheroku(本番環境上)に反映されています。
ただこれはwav上のURLを指定して表示させているだけなので埋め込みリンクみたいなものですよね?
そうではなくて,ローカルではformから投稿するとrailsのpublicみたいなところに保存されていたところを、cloudinaryに保存したい。 という事なんですが
formからアップロードしたものに関しては数分反映されるのですが時間がたつと消えてしまいますし、cloudinaryにもアップロードされていません。
ネット上の情報のみでセットアップしまして、おそらくformからcloudinaryに送るまでのコードに不備があると思うのですが正しい書き方がわかりません。
参考にしたサイトには
・herokuのアカウント画面からcloudinaryをマウント
・クレジット払いの情報を登録
・ymlファイルの情報をコピーしてconfigフォルダにファイルを作成
・cloudinary のgemをインストール
となっているのですが、
まず本当にこれだけで行けるのでしょうか。
モデルやアップローダーには何も記述していません。(後に他サイトを参考に色々記述してみましたが)
rails + cloudinary の情報は非常に少ないように思えます。 主流はs3なのでしょうか。
heroku との連携が優れているとの情報からcloudinaryのアカウントと作ってしまったのでとりあえず動かしたいのですが...
どなたかご教示いただけますと助かります。 よろしくお願いします。

行った作業工程

herokuからcloudinaryをセットアップ
参考にしたサイト
http://mutipuro.xyz/rails-heroku-gazou/

これだけでは/assets/images以下の画像が反映されなかったので手動でcloudinaryにアップロード

rails内の画像のパスをcloudinaryに表示されたURLに変更

git push➜本番環境に画像が反映。

本番環境のformから画像をアップロードしてみるがcloudinaryに反映されず。

他サイトなどを参考に、以前に導入したcarrywaveのアップローダーを編集してみる。

class ImageUploader < CarrierWave::Uploader::Base
   include CarrierWave::RMagick

  if Rails.env.production?#←ここから
    include Cloudinary::CarrierWave
  else
    storage :file
  end#←ここまでを編集

  storage :file

以上です。

ローカル環境ではcarrywave+RMagickで画像をアップロードしています。
そもそもローカルでformからアップロードした画像は/assets/images以下に保存されていないと思います。

webの情報だけで作業しました。 何か欠落しているところはありますでしょうか?
よろしくお願いします。

追記1 確認したこと

gemリスト

$ gem list
carrierwave (1.2.2)
cloudinary (1.9.1)


モデル

class Artist < ApplicationRecord
    mount_uploader :arsha, ImageUploader  
end


投稿フォームのコントローラー

class ArtistsController < ApplicationController
def artist_params
      params.require(:artist).permit(:artist, :arsha, :song)
end

アップローダー

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick

  if Rails.env.production?
    include Cloudinary::CarrierWave
  else
    storage :file
  end
   storage :file
   def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  [version_name, "default.png"].compact.join('_'))

  process :resize_to_limit => [500, 500]

   def public_id
    return model.id
  end
end
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

rails+cloudinaryで結構色々やったのでお力になれるかもしれません。

Uploaderが怪しいです。

class ImageUploader < CarrierWave::Uploader::Base
  # include CarrierWave::RMagick
  include Cloudinary::CarrierWave
end

でアップロードを行ってみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/25 16:05

    おぉぉぉ!! できました!!!!
    ご教示いただいたことのみ記載し、以下のものはコメントアウトして実行してみたところ
    ローカルからですがcloudinaryにアップロードできました!
    #1.
    storage :file
    #2.
    def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
    end
    #3.
    process :resize_to_limit => [500, 500]

    の記載がいけなかったと思うのですが、#1.と#2.のコードの役割はなんなのでしょうか。
    重ねた質問で大変失礼ですがよろしければ教えていただきたいです。。

    ともあれ原因の個所が特定できて本当に感謝です!
    ありがとうございます!!

    キャンセル

+1

お役に立てるか分かりませんが…
つい最近、アプリ内でgemの機能で生成した画像をcloudinaryにアップロードするアプリを開発しました
その際は、carrierwaveは使わなかったのですが、下記のような記述でアップロードいたしましたが、
この様な記述はお試しになられたでしょうか?
img = Cloudinary::Uploader.upload('public/' + filename + '.png', :public_id => 'test_remote')
img = で、imgに代入するような形としているのは、このようにするとパブリックidなどの情報がハッシュとしてimgに格納されるので、何度も画像を生成して保存するのに必要だったからで、imgに代入する記述はなくてもアップロード自体はできました

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/20 16:20

    ありがとうございます。 ちょっとやってみます。

    キャンセル

  • 2018/05/21 21:33

    と思ったのですが私のスキルではこれをどこに記述するのかさえわかりませんでした。
    せっかくコメントいただいたのに申し訳ありません。

    キャンセル

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails 5

    1293questions

  • Heroku

    765questions

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