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

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

ただいまの
回答率

88.61%

AWS S3で画像をポストするとエラーになる(rails)

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 882

YOJI4910

score 7

前提・実現したいこと

よろしくお願いします。
Railsチュートリアル第13章にて、herokuに作成しているサイトから画像をAmazon S3にポストするとエラーになります。S3にアップロードできるようにお力を貸してください。

環境

開発:  cloud9
Ruby:  2.6.3p62
Rails:   5.1.6
carrierwave: 1.2.2
fog-aws:   2.0.1
本番環境:   heroku

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

エラー前後のheroku logsです。

2019-07-25T11:16:10.521795+00:00 app[web.1]: [da8340ec-9515-4074-bf30-e9417c7a539e]   Parameters: {"utf8"=>"✓", "authenticity_token"=>"me0T6DxRd6XmgCo5bYch+oCLozqiICudBFYtldbfOXZruo6v7xU3nXYCTZPZqzfDsDgxwb2QemnXlcRp0kqjWA==", "micropost"=>{"content"=>"test", "picture"=>#<ActionDispatch::Http::UploadedFile:0x0000557b2e9ad540 @tempfile=#<Tempfile:/tmp/RackMultipart20190725-22-zwwhdr.png>, @original_filename="WhiteWallPaper.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"micropost[picture]\"; filename=\"WhiteWallPaper.png\"\r\nContent-Type: image/png\r\n">}, "commit"=>"Post"}
2019-07-25T11:16:10.617032+00:00 app[web.1]: [da8340ec-9515-4074-bf30-e9417c7a539e]   User Load (1.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
2019-07-25T11:16:10.854948+00:00 app[web.1]: [da8340ec-9515-4074-bf30-e9417c7a539e]    (1.3ms)  BEGIN
2019-07-25T11:16:10.862040+00:00 app[web.1]: [da8340ec-9515-4074-bf30-e9417c7a539e]   SQL (2.5ms)  INSERT INTO "microposts" ("content", "user_id", "created_at", "updated_at", "picture") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["content", "test"], ["user_id", 1], ["created_at", "2019-07-25 11:16:10.857052"], ["updated_at", "2019-07-25 11:16:10.857052"], ["picture", "WhiteWallPaper.png"]]
2019-07-25T11:16:10.865219+00:00 app[web.1]: [fog][WARNING] fog: the specified s3 bucket name(“yoji4910”) is not a valid dns name, which will negatively impact performance.  For details see: http://docs.amazonwebservices.com/AmazonS3/latest/dev/BucketRestrictions.html
2019-07-25T11:16:13.441852+00:00 heroku[router]: at=info method=POST path="/microposts" host=yoji-sample-app.herokuapp.com request_id=da8340ec-9515-4074-bf30-e9417c7a539e fwd="106.181.221.65" dyno=web.1 connect=0ms service=3041ms status=500 bytes=1891 protocol=https
2019-07-25T11:16:13.440313+00:00 app[web.1]: [da8340ec-9515-4074-bf30-e9417c7a539e]    (2.5ms)  ROLLBACK
2019-07-25T11:16:13.440850+00:00 app[web.1]: [da8340ec-9515-4074-bf30-e9417c7a539e] Completed 500 Internal Server Error in 2919ms (ActiveRecord: 44.5ms)
2019-07-25T11:16:13.441732+00:00 app[web.1]: [da8340ec-9515-4074-bf30-e9417c7a539e]
2019-07-25T11:16:13.441778+00:00 app[web.1]: [da8340ec-9515-4074-bf30-e9417c7a539e] Excon::Error::BadRequest (Expected(200) <=> Actual(400 Bad Request)
2019-07-25T11:16:13.441783+00:00 app[web.1]: excon.error.response
2019-07-25T11:16:13.441786+00:00 app[web.1]: :body          => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>InvalidBucketName</Code><Message>The specified bucket is not valid.</Message><BucketName>\xE2\x80\x9Cyoji4910\xE2\x80\x9D</BucketName><RequestId>458B17861CE941F4</RequestId><HostId>PQrPSI9FdOAM3195KE5T/oNxvMRWyrg8+50Ud/c+vhGMKD2oL1Kp5XfW/+r/dmc9Kz1mz+d/TKY=</HostId></Error>"
2019-07-25T11:16:13.441788+00:00 app[web.1]: :cookies       => [
2019-07-25T11:16:13.441791+00:00 app[web.1]: ]
2019-07-25T11:16:13.441794+00:00 app[web.1]: :headers       => {
2019-07-25T11:16:13.441796+00:00 app[web.1]: "Connection"       => "close"
2019-07-25T11:16:13.441798+00:00 app[web.1]: "Content-Type"     => "application/xml"
2019-07-25T11:16:13.441801+00:00 app[web.1]: "Date"             => "Thu, 25 Jul 2019 11:16:12 GMT"
2019-07-25T11:16:13.441803+00:00 app[web.1]: "Server"           => "AmazonS3"
2019-07-25T11:16:13.441805+00:00 app[web.1]: "x-amz-id-2"       => "PQrPSI9FdOAM3195KE5T/oNxvMRWyrg8+50Ud/c+vhGMKD2oL1Kp5XfW/+r/dmc9Kz1mz+d/TKY="
2019-07-25T11:16:13.441807+00:00 app[web.1]: "x-amz-request-id" => "458B17861CE941F4"
2019-07-25T11:16:13.441809+00:00 app[web.1]: }
2019-07-25T11:16:13.441811+00:00 app[web.1]: :host          => "s3-ap-northeast-1.amazonaws.com"
2019-07-25T11:16:13.441813+00:00 app[web.1]: :local_address => "172.17.188.222"
2019-07-25T11:16:13.441815+00:00 app[web.1]: :local_port    => 53832
2019-07-25T11:16:13.441817+00:00 app[web.1]: :path          => "/%E2%80%9Cyoji4910%E2%80%9D/uploads/micropost/picture/308/WhiteWallPaper.png"
2019-07-25T11:16:13.441819+00:00 app[web.1]: :port          => 443
2019-07-25T11:16:13.441821+00:00 app[web.1]: :reason_phrase => "Bad Request"
2019-07-25T11:16:13.441824+00:00 app[web.1]: :remote_ip     => "52.219.0.12"
2019-07-25T11:16:13.441826+00:00 app[web.1]: :status        => 400
2019-07-25T11:16:13.441828+00:00 app[web.1]: :status_line   => "HTTP/1.1 400 Bad Request\r\n"
2019-07-25T11:16:13.441829+00:00 app[web.1]: ):
2019-07-25T11:16:13.441873+00:00 app[web.1]: [da8340ec-9515-4074-bf30-e9417c7a539e]
2019-07-25T11:16:13.441920+00:00 app[web.1]: [da8340ec-9515-4074-bf30-e9417c7a539e] app/controllers/microposts_controller.rb:8:in `create'

関連コード

AWSの設定

/config/initializers/carrier_wave.rb

if Rails.env.production?
  CarrierWave.configure do |config|
    config.fog_credentials = {
      # Amazon S3用の設定
      :provider              => 'AWS',
      :region                => ENV['S3_REGION'],     # 例: 'ap-northeast-1'
      :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
      :aws_secret_access_key => ENV['S3_SECRET_KEY']
    }
    config.fog_directory     =  ENV['S3_BUCKET']
  end
end


cloud9のbashで環境変数を設定

$ heroku config:set S3_ACCESS_KEY="<自分のアクセスキー>"
$ heroku config:set S3_SECRET_KEY="<シークレットキー>"
$ heroku config:set S3_BUCKET="<Bucket name>"
$ heroku config:set S3_REGION="<東京のリージョンコード>"

試したこと

heroku logsの以下の部分に注目しまして

[fog][WARNING] fog: the specified s3 bucket name(“yoji4910”) is not a valid dns name,
 which will negatively impact performance.  For details see:
 http://docs.amazonwebservices.com/AmazonS3/latest/dev/BucketRestrictions.html


bucket nameがエラーの原因だと考え、いろいろなbucket nameを試しました。
例) yoji4910, s3abc, cd-huytなど

awsでbucket nameを変更した際はちゃんと、bashで環境変数の変更も行っています。
結果として、何も変化なしでした。

テスト環境では特に問題なく動きます(もちろんS3のテストはできませんが)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

解決いたしました!
bucket nameに"をつけていたことが原因でした。
しかし…
Railsチュートリアルには
$ heroku config:set S3_BUCKET="Bucketの名前を入力"
とあるので、"を含めてしまうのは仕方がないのではとも思いますが…
だめですね…精進いたします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る