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
Ruby
1# 商品テーブルのデータ 275.times do |num| 3 genre_id = rand(1..3) 4 subgenre_id_range = (genre_id * 5 - 4)..(genre_id * 5) 5 item = Item.create( 6 itemCodeNo: num+1, 7 partNumber: "ITEM-#{num+1}", 8 itemName:"商品-#{num+1}", 9 genre_id: genre_id, 10 subgenre_id: rand(subgenre_id_range), 11 price: rand(1..100000), 12 mainImage: File.open("#{Rails.root}/db/fixtures/#{num+1}_1.jpg"), 13 image2: File.open("#{Rails.root}/db/fixtures/#{num+1}_2.jpg"), 14 image3: File.open("#{Rails.root}/db/fixtures/#{num+1}_3.jpg"), 15 created_at: (Time.local(2018, 4, 1, 0, 0, 0) + (num * 60)), 16 ) 17 item.save! 18end
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
Ruby
1# http://vdeep.net/rubyonrails-carrierwave-s3 2if Rails.env.production? 3 CarrierWave.configure do |config| 4 config.fog_provider = 'fog/aws' 5 config.fog_credentials = { 6 provider: 'AWS', 7 # アクセスキー 8 aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], 9 # シークレットキー 10 aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 11 # Tokyo 12 region: ENV['AWS_REGION'] 13 } 14 # 公開・非公開の切り替え 15 config.fog_public = true 16 # キャッシュの保存期間 17 config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" } 18 config.fog_directory = ENV['PRODUCTION_FOG_DIRECTORY'] 19 config.asset_host = ENV['PRODUCTION_ASSETS_HOST'] 20 # キャッシュをS3に保存 21 config.cache_storage = :fog 22 end 23end 24 25 # 公開・非公開の切り替え 26 # config.fog_public = true 27 # キャッシュの保存期間 28 # config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" } 29 30 # キャッシュをS3に保存 31 # config.cache_storage = :fog 32 33 # 環境ごとにS3のバケットを指定 34 case Rails.env 35 when 'development' 36 config.fog_directory = ENV['DEVELOPMENT_FOG_DIRECTORY'] 37 config.asset_host = ENV['DEVELOPMENT_ASSETS_HOST'] 38 when 'test' 39 config.fog_directory = ENV['TEST_FOG_DIRECTORY'] 40 config.asset_host = ENV['TEST_ASSETS_HOST'] 41 end 42 43# 日本語ファイル名の設定 44CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:].\-+]/