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

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

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

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

Heroku

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

2回答

867閲覧

デコードの仕組みについて

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 6

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

Heroku

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2023/01/11 08:57

編集2023/01/15 12:10

前提

herokuにデプロイしたアプリが画像をデコードできないということでエラーが発生しました。
開発環境では画像がデコードされており、本番環境に限った問題っぽいです。
別でそのエラーに関する質問をしていたのですが、

デコードできないのは、文字列が認識されていないからでしょうか?
画像(image)の型はstringです。

デコードのエラーに関する質問
https://teratail.com/questions/rn48se0qm091p3

画像に関するコード

class PhotoUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: # include CarrierWave::RMagick include CarrierWave::MiniMagick process resize_and_pad: [1000, 650, "#ffffff", "Center"] # Choose what kind of storage to use for this uploader: if Rails.env.development? storage :file else include Cloudinary::CarrierWave end def extension_white_list %w(jpg jpeg gif png) end def size_range 1..5.megabytes end # storage :fog # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end # Provide a default URL as a default if there hasn't been a file uploaded: # def default_url(*args) # # For Rails 3.1+ asset pipeline compatibility: # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) # # "/images/fallback/" + [version_name, "default.png"].compact.join('_') # end # Process files as they are uploaded: # process scale: [200, 300] # # def scale(width, height) # # do something # end # Create different versions of your uploaded files: # version :thumb do # process resize_to_fit: [50, 50] # end # Add an allowlist of extensions which are allowed to be uploaded. # For images you might use something like this: # def extension_allowlist # %w(jpg jpeg gif png) # end # Override the filename of the uploaded files: # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename # end end

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

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

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

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

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

y_waiwai

2023/01/11 09:18

で、しつもんはなんでしょうか
退会済みユーザー

退会済みユーザー

2023/01/11 09:35

デコードされないのは、文字列が認識されていないからでしょうか?
no1knows

2023/01/11 11:35

RubyのバージョンがLocalとHerokuで異なっている可能性はないでしょうか?
退会済みユーザー

退会済みユーザー

2023/01/11 16:37 編集

どうやらrubyのバージョンが違うと、わかりました。 コマンドから、現在のrubyのバージョンを確認したところ、 ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux] と表示されました。 LocalとHerokuでバージョンが異なっている可能性は確認できませんでした。 herokuでは3.0.0ではなくRuby 2.5.1が推奨されていると調べて分かったので、バージョンを下げてデプロイする必要があるということでしょうか?
no1knows

2023/01/11 17:32

ActionView::Template::Error (undefined method `decode' for URI:Module): のエラーを中心に調べたら、Ruby3.0で下記の変更に関するエラーのような気がしました。 https://twitter.com/shugomaeda/status/1342356714973106176 なので、Localが2.xでHerokuが3.xだと当てはまるかなと思っての質問でした。 > herokuでは3.0.0ではなくRuby 2.5.1が推奨されている 公式をきちんと見たほうが良いです。 https://devcenter.heroku.com/ja/articles/ruby-support#ruby-versions
退会済みユーザー

退会済みユーザー

2023/01/14 07:32

すみません。 一つ疑問に思ったのですが、rubyのバージョンは最初から3.0.0で、私事ですが以前、ポートフォリオで画像投稿サイトを作成し、herokuにアップした際は、問題なくデコードされました。 そこで、違いを調べたのですが、そのサイトも今作成しているサイトとバージョンは同じく3.0.0で、アップの仕方や設定も同じくしました。 前回と今回の間にherokuを無料版から有料版に変更しました。 バージョンの違いが起きてしまった原因が分からないのですが、Rubyのバージョン違いが起きてしまったのは、有料版にしたからでしょうか?
guest

回答2

0

エンコード・デコードについてあまり良くわかっていないのと、検索しただけで恐縮ですが。。。
もし、Remove deprecated URI.escape/URI.unescapeの仕様変更が原因であれば、下記を参考にしてCGI.unescapeなどを利用するか、

From the latest Ruby docs for URI.unescape: "This method is obsolete and should not be used. Instead, use CGI.unescape, URI.decode_www_form or URI.decode_www_form_component depending on your specific use case."

出典:https://stackoverflow.com/a/7146153

シンプルに下記でもできそうな記述がありました。

Ruby can decode it with the .unpack("M") method.

出典:https://stackoverflow.com/a/2733182

※同じスレッド内の回答を抜粋しています。

投稿2023/01/12 01:12

no1knows

総合スコア3365

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

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

退会済みユーザー

退会済みユーザー

2023/01/12 07:21

すみません。 試そうとしているのですが、この仕様変更はlib配下にフォルダー・ファイルを作成して仕様変更の記述するのでしょうか?
no1knows

2023/01/12 22:22

> # This method is obsolete and should not be used. コード内に上記のように記載されているので、このコードを利用するのは、あまり良くない気がします。 理由はわかりませんが・・・ > # CGI.escape, URI.encode_www_form or URI.encode_www_form_component > # depending on your specific use case. とのことなので、他のアプローチを選択したほうが良いと思います。 例えば、下記のような方法などで試してみると良いかと思います。 https://qiita.com/TeQuiLayy/items/abb29641892e7c459620
退会済みユーザー

退会済みユーザー

2023/01/14 09:47

少しやり方が分からず、思い切って一度herokuをアンインストールして、再度インストールし、アプリ作成~デプロイまでやり直してみようとも考えたのですが、これはデータ的に破損とか、不具合につながる恐れがありますでしょうか?
no1knows

2023/01/14 12:04

アンインストールというのがどういうことを指すのかわかりませんが、Herokuの該当アプリとDBを削除して、新たに作り直すというのならアプローチの方法としては悪くないと思います。 ふと思ったのですが、そもそも画像データはAWSのS3とかクラウドに保存しているのでしょうか?
退会済みユーザー

退会済みユーザー

2023/01/14 19:24

アップしたいプロジェクトにherokuをコマンドからインストールしてたのですが、再インストールしなおしたほうがバージョンが違うのを治せるかなと思いました。 該当アプリとDBを削除して作り直して再度デプロイするやり方は何度か試したのですが、変わりませんでした。 また、画像データは開発環境storage :fileでpublic配下に保存される形に。本番環境はCloudinaryをherokuアプリに追加してそこに保存してもらう形にしています。 https://qiita.com/Okame-chan/items/39052dc4d4c3cebfb1ee
no1knows

2023/01/14 23:55

そもそもですが、ローカルと本番環境でアップロードの仕方が異なるのは良くないです。 プロジェクトの作り直しが可能であれば、新しいプロジェクトを作成したほうが良いです。 Herokuではないですが、Render.comでうまくいかず、かなりの時間を無駄にしました。(経験則なので参考までに…) またアプリ名は、削除後、同じ名前を取れたはずなので、アプリ運用前であれば、全てリセットするリスクは少ないと思います。 なので手順としては、下記を検討していただくと良いかと思います。 1. ローカルでCloudinaryを利用できるようにする(必須) 2. プロジェクトを作り直す(推奨)
退会済みユーザー

退会済みユーザー

2023/01/15 12:36

すみません。 自分でプロジェクトと名前を出しておいて申し訳ないのですが、プロジェクトは作成したrubyのファイルの事ですか?それともherokuで作成したアプリのことですか? どっちか気になってしまったので質問させていただきました。 また質問箇所に画像に関するファイル,photo_uploader.rbのコードを記載させていただきました。 こちらに画像の保存先のコードを書いているのですが、以前画像投稿アプリを作成した際と同じようにコードを作成したのですが、今回のエラーが発生しました。
no1knows

2023/01/15 13:28

プロジェクトは、Herokuのアプリのことです。 問題の切り分けのために、「1.ローカルでCloudinaryを利用できる」ようにしてください。 具体的には、photo_uploader.rbのif Rails.env.development?のところを修正する形になるかと思います。 1.を実施した段階でも同じエラーがでるようなら、 photo_uploader.rbのprocess resize_and_pad: [1000, 650, "#ffffff", "Center"] をコメントアウトしてみてどうなるか確認すると方針が決まると思います。
退会済みユーザー

退会済みユーザー

2023/01/16 02:46 編集

ローカル環境でのcloudinaryはapikeyを求められるエラーが発生しました。 コメントアウトをして試したりもしたのですが、同じエラーでした。 本番環境も変わらず、同じエラーが発生しました。 また以前cloudinaryを使用したアプリを作成した際はローカル環境ではcloudinaryを使いませんでしたが、本番環境でも機能したので、今回も本番環境だけcloudinaryを使用して、Herokuアプリ作成後に cloudinaryを heroku addons:create cloudinary:starter で作成したHerokuのアプリに追加して いるのですが、このやり方が問題があったりしますか?
no1knows

2023/01/16 02:55

なるほど…HerokuだからAPIキーは、AddOnで自動付与されているんだと思います。 テスト環境はローカルに保存で大丈夫です。 1.そもそも表示したい画像データはCloudinaryに保存されていますか? 2.本番環境でphoto_uploader.rbのprocess resize_and_pad: [1000, 650, "#ffffff", "Center"]をコメントアウトしたらどうなりますか?
退会済みユーザー

退会済みユーザー

2023/01/16 17:31

1.画像データがCloudinaryに保存されているか確認しようとしたのですが、どこで確認できるかわかりませんでした。 2.コメントアウトをしてみて再度アプリを作成しなおして試してみたのですが、変わらずデコードエラーが発生しました。 以前、ループ文のエラーからエラーログを見た際に画像(photo)に画像のテキストが文字列に入っているか確認した時には拡張子までちゃんと文字列に画像の文字列が保存されていたので、おそらくCloudinaryに保存されているのかなと思ったのですが、まずはCloudinaryに保存されているか確認できませんでした。 すみません。
退会済みユーザー

退会済みユーザー

2023/01/19 17:10

デコードできないという原因または関係しているのは画像を保存しているCloudinaryなのでしょうか? はたまたデーターベースを保存しているHeroku Postgresがデコードできないのでしょうか? またCloudinaryの中身を拝見する方法が調べても、うまくいかず教えて頂けたら幸いです。
no1knows

2023/01/20 00:19

Gitで管理していて公開が可能であればURLを教えてほしいです。 難しいようであればRubyのバージョンと、Railsのバージョンを教えて下さい。
退会済みユーザー

退会済みユーザー

2023/01/20 11:02

Rubyのバージョンはruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux] RailsのバージョンはRails 6.1.7です。
退会済みユーザー

退会済みユーザー

2023/01/26 00:22

herokuのバージョンはこちらが表示されました。 heroku -v › Warning: heroku update available from 7.60.1 to 7.66.4. heroku/7.60.1 linux-x64 node-v14.19.0
退会済みユーザー

退会済みユーザー

2023/02/05 03:37

これから使用レンタルサーバーをrender.comに移行して画像表示されるかを試そうとしているのですが、まずCloudinaryをプロジェクト内に導入しなければならないのでしょうか? キーやパスワードのようなものを記入しないといけないのでしょうか?
guest

0

検索すると、このような結果が見つかりますが、何か参考になるものはないでしょうか。

投稿2023/01/11 09:18

arcxor

総合スコア2859

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

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

退会済みユーザー

退会済みユーザー

2023/01/11 09:38

herokuのログで確認した際に表示されたデコードに関するエラーは下記です。 2022-12-31T09:56:17.582496+00:00 app[web.1]: I, [2022-12-31T09:56:17.582463 #4] INFO -- : [11d421a8-a463-4609-aa8d-bcb583eb6595] Completed 500 Internal Server Error in 45ms (ActiveRecord: 12.4ms | Allocations: 18639) 2022-12-31T09:56:17.583544+00:00 app[web.1]: F, [2022-12-31T09:56:17.583499 #4] FATAL -- : [11d421a8-a463-4609-aa8d-bcb583eb6595] 2022-12-31T09:56:17.583546+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] ActionView::Template::Error (undefined method `decode' for URI:Module):
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問