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

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

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

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

Heroku

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

Q&A

解決済

2回答

3879閲覧

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

seen

総合スコア49

Ruby on Rails 5

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

Heroku

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

0グッド

2クリップ

投稿2018/05/04 05:28

編集2018/05/06 01:01

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

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

Uploaderが怪しいです。

ruby

1class ImageUploader < CarrierWave::Uploader::Base 2 # include CarrierWave::RMagick 3 include Cloudinary::CarrierWave 4end

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

投稿2018/05/24 00:32

kenny_sayama

総合スコア1036

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

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

seen

2018/05/25 07: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.のコードの役割はなんなのでしょうか。 重ねた質問で大変失礼ですがよろしければ教えていただきたいです。。 ともあれ原因の個所が特定できて本当に感謝です! ありがとうございます!!
guest

0

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

投稿2018/05/16 11:26

space-hippy

総合スコア136

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

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

seen

2018/05/20 07:20

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

2018/05/21 12:33

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問