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

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

ただいまの
回答率

90.61%

  • Ruby on Rails 4

    2404questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • Heroku

    823questions

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

Herokuでのdb:seedができない

受付中

回答 2

投稿 編集

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

begenner

score 22

Railsにて一応のサンプルができあがりherokuにアップして初期データを投入しようとしたところ、エラーが発生し、詰まっています。
db:migrate自体は問題なく動作しました。
エラーの内容から自分の中で考えられるのは

  • 画像の初期データをアップしているところでエラーが発生している
  • S3を使っていることが原因
  • Herokuのregionがアメリカ、自分のregion(S3)は日本

であることが原因のように考えられますが対処の仕方がわかりません。
わかる方がいらっしゃれば教えていただきますようよろしくお願いいたします(m_ _m)

エラー内容

エラーログ

rake aborted!
Excon::Error::BadRequest: 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>2EC7E6D960D35DB4</RequestId><HostId>vVIJEaTWzD/fiC5U97KYd0QR6LsKmWAaKDINLa1yMrraVmVhK+Z/nE9R1DSw+ZcidyrkpyXh1Ss=</HostId></Error>"
  :cookies       => [
  ]
  :headers       => {
    "Connection"       => "close"
    "Content-Type"     => "application/xml"
    "Date"             => "Mon, 11 Jun 2018 23:45:04 GMT"
    "Server"           => "AmazonS3"
    "x-amz-id-2"       => "vVIJEaTWzD/fiC5U97KYd0QR6LsKmWAaKDINLa1yMrraVmVhK+Z/nE9R1DSw+ZcidyrkpyXh1Ss="
    "x-amz-request-id" => "2EC7E6D960D35DB4"
  }
  :host          => "xxx-production.s3.amazonaws.com"
  :local_address => "172.16.85.162"
  :local_port    => 54390
  :path          => "/uploads/tmp/1528760700-4-0001-7336/1_1.jpg"
  :port          => 443
  :reason_phrase => "Bad Request"
  :remote_ip     => "52.219.4.73"
  :status        => 400
  :status_line   => "HTTP/1.1 400 Bad Request\r\n"
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/expects.rb:7:in `response_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/response_parser.rb:9:in `response_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/connection.rb:414:in `response'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/connection.rb:263:in `request'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/idempotent.rb:33:in `error_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/base.rb:11:in `error_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/base.rb:11:in `error_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/connection.rb:283:in `rescue in request'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/connection.rb:226:in `request'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/idempotent.rb:33:in `error_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/base.rb:11:in `error_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/base.rb:11:in `error_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/connection.rb:283:in `rescue in request'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/connection.rb:226:in `request'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/idempotent.rb:33:in `error_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/base.rb:11:in `error_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/middlewares/base.rb:11:in `error_call'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/connection.rb:283:in `rescue in request'
/app/vendor/bundle/ruby/2.3.0/gems/excon-0.62.0/lib/excon/connection.rb:226:in `request'
/app/vendor/bundle/ruby/2.3.0/gems/fog-core-2.1.0/lib/fog/core/connection.rb:81:in `request'
/app/vendor/bundle/ruby/2.3.0/gems/fog-xml-0.1.3/lib/fog/xml/connection.rb:9:in `request'
/app/vendor/bundle/ruby/2.3.0/gems/fog-aws-3.0.0/lib/fog/aws/storage.rb:613:in `_request'
/app/vendor/bundle/ruby/2.3.0/gems/fog-aws-3.0.0/lib/fog/aws/storage.rb:608:in `request'
/app/vendor/bundle/ruby/2.3.0/gems/fog-aws-3.0.0/lib/fog/aws/requests/storage/put_object.rb:46:in `put_object'
/app/vendor/bundle/ruby/2.3.0/gems/fog-aws-3.0.0/lib/fog/aws/models/storage/file.rb:220:in `save'
/app/vendor/bundle/ruby/2.3.0/gems/fog-core-2.1.0/lib/fog/core/collection.rb:50:in `create'
/app/vendor/bundle/ruby/2.3.0/gems/carrierwave-1.2.2/lib/carrierwave/storage/fog.rb:315:in `store'
/app/vendor/bundle/ruby/2.3.0/gems/carrierwave-1.2.2/lib/carrierwave/storage/fog.rb:110:in `cache!'
/app/vendor/bundle/ruby/2.3.0/gems/carrierwave-1.2.2/lib/carrierwave/uploader/cache.rb:138:in `block in cache!'
/app/vendor/bundle/ruby/2.3.0/gems/carrierwave-1.2.2/lib/carrierwave/uploader/callbacks.rb:15:in `with_callbacks'
/app/vendor/bundle/ruby/2.3.0/gems/carrierwave-1.2.2/lib/carrierwave/uploader/cache.rb:137:in `cache!'
/app/vendor/bundle/ruby/2.3.0/gems/carrierwave-1.2.2/lib/carrierwave/mounter.rb:44:in `block in cache'
/app/vendor/bundle/ruby/2.3.0/gems/carrierwave-1.2.2/lib/carrierwave/mounter.rb:42:in `map'
/app/vendor/bundle/ruby/2.3.0/gems/carrierwave-1.2.2/lib/carrierwave/mounter.rb:42:in `cache'
/app/vendor/bundle/ruby/2.3.0/gems/carrierwave-1.2.2/lib/carrierwave/mount.rb:146:in `mainImage='
/app/vendor/bundle/ruby/2.3.0/gems/carrierwave-1.2.2/lib/carrierwave/orm/activerecord.rb:70:in `mainImage='
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/attribute_assignment.rb:54:in `public_send'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/attribute_assignment.rb:54:in `_assign_attribute'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/attribute_assignment.rb:41:in `block in assign_attributes'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/attribute_assignment.rb:35:in `each'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/attribute_assignment.rb:35:in `assign_attributes'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/core.rb:566:in `init_attributes'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/core.rb:281:in `initialize'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/inheritance.rb:61:in `new'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/inheritance.rb:61:in `new'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/persistence.rb:33:in `create'
/app/db/seeds.rb:30:in `block in <top (required)>'
/app/db/seeds.rb:27:in `times'
/app/db/seeds.rb:27:in `<top (required)>'
/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.10/lib/active_support/dependencies.rb:268:in `load'
/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.10/lib/active_support/dependencies.rb:268:in `block in load'
/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.10/lib/active_support/dependencies.rb:240:in `load_dependency'
/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.10/lib/active_support/dependencies.rb:268:in `load'
/app/vendor/bundle/ruby/2.3.0/gems/railties-4.2.10/lib/rails/engine.rb:547:in `load_seed'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/tasks/database_tasks.rb:253:in `load_seed'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.10/lib/active_record/railties/databases.rake:173:in `block (2 levels) in <top (required)>'

期待する動作

heroku上で問題なくdb:seedによる初期データ投入を完了したい

動作環境

Ruby:2.3.5
Ruby on Rails: 4.2.5

 db/seeds.rb

# 商品テーブルのデータ
75.times do |num|
  genre_id = rand(1..3)
  subgenre_id_range = (genre_id * 5 - 4)..(genre_id * 5)
  item = Item.create(
      itemCodeNo: num+1,
      partNumber: "ITEM-#{num+1}",
      itemName:"商品-#{num+1}",
      genre_id: genre_id,
      subgenre_id: rand(subgenre_id_range),
      price: rand(1..100000),
      mainImage: File.open("#{Rails.root}/db/fixtures/#{num+1}_1.jpg"),
      image2: File.open("#{Rails.root}/db/fixtures/#{num+1}_2.jpg"),
      image3: File.open("#{Rails.root}/db/fixtures/#{num+1}_3.jpg"),
      created_at: (Time.local(2018, 4, 1, 0, 0, 0) + (num * 60)),
  )
  item.save!
end


app/uploaders/image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  if Rails.env.production?
    storage :fog
  else
    storage :file
  end

  def size_range
    0.kilobytes..5.megabytes
  end

  process resize_to_fit: [300, 300]

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def extension_whitelist
    %w(jpg jpeg gif png)
  end
end

config/initializers/carrier_wave.rb

# http://vdeep.net/rubyonrails-carrierwave-s3
if Rails.env.production?
  CarrierWave.configure do |config|
    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'],
        # Tokyo
        region:  ENV['AWS_REGION']
    }
    # 公開・非公開の切り替え
    config.fog_public = true
    # キャッシュの保存期間
    config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" }
    config.fog_directory = ENV['PRODUCTION_FOG_DIRECTORY']
    config.asset_host = ENV['PRODUCTION_ASSETS_HOST']
    # キャッシュをS3に保存
    config.cache_storage = :fog
  end
end

  # 公開・非公開の切り替え
  # config.fog_public = true
  # キャッシュの保存期間
  # config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" }

  # キャッシュをS3に保存
  # config.cache_storage = :fog

  # 環境ごとにS3のバケットを指定
  case Rails.env
  when 'development'
    config.fog_directory = ENV['DEVELOPMENT_FOG_DIRECTORY']
    config.asset_host = ENV['DEVELOPMENT_ASSETS_HOST']
  when 'test'
    config.fog_directory = ENV['TEST_FOG_DIRECTORY']
    config.asset_host = ENV['TEST_ASSETS_HOST']
  end

# 日本語ファイル名の設定
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • mather

    2018/06/12 10:08

    ソースコード (seed.rb) も記載してください

    キャンセル

  • mather

    2018/06/12 10:31 編集

    記載された seeds.rb はDBへの初期データ作成しかしてないですよね。S3へのファイルアップロード部分はどこに記載したんですか?そちらを記載しないと解決されないと思います。

    キャンセル

  • begenner

    2018/06/12 10:38

    initializerに記述したファイルを追記しました。uploaderの設定ファイルもすぐに追加します。

    キャンセル

  • begenner

    2018/06/12 10:42

    わかる範囲で関連ファイルを追記しました。よろしくお願いいたします(m_ _m)

    キャンセル

回答 2

+1

Cloudinaryならもっと簡単に実現出来そうな気がします...

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

リージョンは ENV['AWS_REGION'] で指定されているので、 Heroku上の環境変数を指定すればリージョンは変更可能だと思うのですが、それではうまくいかないんですか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • Ruby on Rails 4

    2404questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • Heroku

    823questions

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