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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

Amazon S3

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

Q&A

0回答

568閲覧

[rails6]S3 x Carrewave で画像をアップロードできない。(ローカル)

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

Amazon S3

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

0グッド

1クリップ

投稿2021/07/17 04:19

前提・実現したいこと

Rails6でinstagram風な投稿アプリを作成しています。
CarrierWaveを使い、ローカルへの保存を行うところまでは完了しています。
ローカル、本番共にS3へファイルをアップロードしたいと考えているます。

S3へ保存先を切り替えて、投稿を行う際、
createアクションが叩かれるとエラーが起こってしまい、保存が行えません。

おそらく、aws上の設定で弾かれているのでは?と考えていますが、解決策が見出せていません。

発生している問題・エラーメッセージ(一部xxで置換)

Excon::Error::BadRequest in MicroPostsController#create Expected(200) <=> Actual(400 Bad Request) excon.error.response :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'ap-northeast-1'</Message><Region>ap-northeast-1</Region><RequestId>xxxxxxxxxx</RequestId><HostId>xxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=</HostId></Error>" :cookies => [ ] :headers => { "Connection" => "close" "Content-Type" => "application/xml" "Date" => "Sat, 17 Jul 2021 03:53:18 GMT" "Server" => "AmazonS3" "x-amz-id-2" => "xxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=" "x-amz-request-id" => "xxxxxxxxxx" } :host => "xxx-development.s3.amazonaws.com" :local_address => "xxx.xxx.xxx.xx :local_port => xxxx :path => "/uploads/tmp/1626493993-237653937050249-0001-0506/_%E3%83%81%E3%83%BC%E3%83%A0_%E3%82xxxxxxxxx.png" :port => 443 :reason_phrase => "Bad Request" :remote_ip => "xx.xxx.xx.xxx.xx" :status => 400 :status_line => "HTTP/1.1 400 Bad Request\r\n"

該当のソースコード

AWS_ACCESS_KEY_ID = 'xxxxxxxxxxxxxxxx' AWS_SECRET_ACCESS_KEY = 'xxxxxxxxx+xxxxxxxxxx+xxxxxxxxx' AWS_REGION = 'ap-northeast-1' #carrierwave.rb require 'carrierwave/storage/abstract' require 'carrierwave/storage/file' require 'carrierwave/storage/fog' CarrierWave.configure do |config| config.storage = :fog config.fog_provider = 'fog/aws' config.fog_credentials = { provider: 'AWS', aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], region: ENV['AWS_REGION'], } config.fog_directory = 'xxxxx-development' config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/xxxxx-development' end CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:].\-+]/ #ImageUploader class ImageUploader < CarrierWave::Uploader::Base if Rails.env.development? storage :fog elsif Rails.env.test? storage :fog else storage :fog end def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def extension_whitelist %w(jpg jpeg gif png) end def filename "#{secure_token}.#{file.extension}" if original_filename.present? end protected def secure_token var = :"@#{mounted_as}_secure_token" model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid) end end

試したこと

#######ローカルへのファイルの保存
ImageUploaderで Rails.env.development?で[storage :file]を指定すると、ローカルへ画像が正常に保存されますので、投稿機能自体は正常に動いています。

#######S3上でのバケット設定

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

#######S3上でのアクセスコンとトールリスト設定

[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "PUT", "POST", "DELETE" ], "AllowedOrigins": [ "http://localhost:3000" ], "ExposeHeaders": [] } ]

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

・rails:6
・ruby:3.0.0
必要なファイルなどの情報は言ってもらえれば載せさして頂きます。
どうかよろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問