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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

Q&A

0回答

1359閲覧

本番環境でのみRMagickを使ったEXIFデータの取得ができません

ty_tech

総合スコア1

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

0グッド

0クリップ

投稿2021/01/26 08:44

実現したいこと

本番環境でAWS S3にアップロードする際に画像からEXIFデータを取得したい

前提

Ruby、Ruby on Railsを使用。
carrierwaveとfog-aws、rmagickのgemを使用しています。
S3バケットの作成、バケットポリシー、IAM、CloudFrontは完了済みです。
herokuを使っています。

発生している問題・エラーメッセージ

S3に切り替える前は、本番環境でも目的の動作が確認できたため、S3に変更したところ、本番環境において以下のエラーが出ます。

herokuのログ: Magick::ImageMagickError (attempt to perform an operation not allowed by the security policy `HTTPS' @ error/delegate.c/InvokeDelegate/1726):

該当のソースコード

AWS S3 バケット アクセス権限 ブロックパブリックアクセス (バケット設定)

パブリックアクセスをすべてブロック オフ 新しいアクセスコントロールリスト (ACL) を介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする オフ 任意のアクセスコントロールリスト (ACL) を介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする オフ 新しいパブリックバケットポリシーを介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする オン 任意のパブリックバケットポリシーを介して、バケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする オン

carrierwave.rb

if Rails.env.production? || Rails.env.development? CarrierWave.configure do |config| config.fog_credentials = { provider: 'AWS', aws_access_key_id: ENV['S3_ACCESS_KEY'], aws_secret_access_key: ENV['S3_SECRET_KEY'], region: ENV['S3_REGION'] } config.fog_directory = ENV['S3_BUCKET'] config.asset_host = "https://<バケット名>.s3.amazonaws.com" end end

fish-image_uploader.rb

class FishImageUploader < CarrierWave::Uploader::Base include CarrierWave::RMagick if Rails.env.production? || Rails.env.development? storage :fog else storage :file end process :get_exif_info def get_exif_info exif = Magick::Image.read(self.file.file).first end def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end end

app/controllers/posts_controller.rb

class PostsController < ApplicationController    省略 def confirm @tournament = Tournament.find(params[:tournament_id]) @post = Post.new(post_params) @post.user_id = current_user.id @user = @post.user img = Magick::ImageList.new("#{@post.fish_image}")  ←この箇所でエラーになります get_exif = img.get_exif_by_entry('GPSLatitude') if get_exif[0][1].nil? redirect_to new_tournament_post_path(@tournament), alert: "写真にGPSデータが無いため、投稿出来ませんでした。" else exif_lat = Post.get_exif_latitude(img) @latitude = Post.get_exif_gps(exif_lat) exif_lng = Post.get_exif_longitude(img) @longitude = Post.get_exif_gps(exif_lng) dt = img.get_exif_by_entry('DateTimeOriginal') @post.datetime = Time.strptime(dt[0][1], '%Y:%m:%d %H:%M:%S') return if @post.valid? end end    省略 private def post_params params.require(:post).permit(:fish_image, :fish_image_cache, :latitude, :longitude, :datetime).merge(tournament_id: params[:tournament_id]) end end

行ったこと

・開発環境でS3に保存した場合で行ったところ、画面の表示と投稿は正常に行うことができ、AWS S3のバケットに画像は保存されます。
本番環境だけがエラーが発生する。ことを確認。

attempt to perform an operation not allowed by the security policy "HTTPS"に関して調べる。(参考サイト)
改善箇所が分からず詰まってしまいました。

S3へ切り替えてからエラーになっているので、AWS S3の権限の問題かと考えて調べておりましたが、具体的な解決策が見つかりません。
恐縮ですが、ご教示いただけますと幸いです。よろしくお願い致します。

参考サイト

https://imagemagick.org/script/security-policy.php

補足情報(FW/ツールのバージョンなど)

ImageMagick 7.0.10-34
Rails 6.0.3.2

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問