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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/25 07:05