ECサイトを作成しています。
モデルは以下の通りです。
ローカル環境ではうまくいっていたのですが、
herokuにデプロイするとcreateアクションでエラーが起こってしまいます。
/products/new → /products(createアクション) に画面遷移してエラーになります。
ローカル環境と本番環境の違いは本番環境ではアップロード先を、
AWS S3に指定してるところです。(下記コードのアップローダーの部分)
なぜnewアクションでエラーが起こるのか検討もつかないので、間違いがあれば指摘いただけると幸いです。
下記に該当コードを記載します。
商品モデル productモデルカラム
title(商品名) | description(説明) | price(値段) | stock_quantity(在庫) | images(複数写真) |
---|---|---|---|---|
string型 | text型 | integer型 | integer型 | json型 |
ユーザモデル userモデルカラム
name(名前) | email(メアド) | password(パスワード) | address(住所) |
---|---|---|---|
string型 | string型 | string型 | string型 |
ruby
1↓gemファイル 2 3gem 'pg' 4gem 'devise' 5gem 'carrierwave' 6gem 'mini_magick' 7gem 'fog-aws'
ruby
1ルーティング↓ 2 3Rails.application.routes.draw do 4 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 5 root 'products#index' 6 resources :products 7 get '/products/:id/buy' => 'products#buy' 8 post '/products/:id/pay' => 'products#pay' 9 devise_for :users 10end 11
ruby
1↓プロダクトコントローラー 該当部分 2 3class ProductsController < ApplicationController 4 def new 5 @product = Product.new 6 end 7 8 def create 9 @product = Product.new(product_params) 10 if @product.save 11 redirect_to root_path, notice:'商品を登録しました' 12 else 13 render :new 14 end 15 end 16 17 private 18 def product_params 19 params.require(:product).permit(:title,:description,:price,:stock_quantity,{images: []}) 20 end 21 22end
ruby
1↓/views/products/new.html.erb newページ ビュー 2 3<p>商品登録</p> 4<div class="form-wrapper"> 5<%= form_with model: @product, local: true do |f| %> 6 <div class="form"> 7 <p>商品名(20文字以内)</p> 8 <%= f.text_field :title, :placeholder => "商品名(20文字以内)" %> 9 </div> 10 <div class="form"> 11 <p>商品説明(500文字以内)</p> 12 <%= f.text_area :description, :placeholder => "商品説明(500文字以内)", :cons => "20", :wrap => "hard" %> 13 </div> 14 <div class="form"> 15 <p>価格(税込)※数字のみ記述</p> 16 <%= f.number_field :price, :placeholder => "価格(税込)※数字のみ記述" %> 17 </div> 18 <div class="form"> 19 <p>在庫数 ※数字のみ記述</p> 20 <%= f.number_field :stock_quantity, :placeholder => "在庫数 ※数字のみ記述" %> 21 </div> 22 <div class="form img"> 23 <p>画像(1枚必須・5枚まで任意)</p> 24 <%= f.file_field :images, multiple: true %> 25 <%= f.file_field :images, multiple: true %> 26 <%= f.file_field :images, multiple: true %> 27 <%= f.file_field :images, multiple: true %> 28 <%= f.file_field :images, multiple: true %> 29 </div> 30 <div class="form"> 31 <%= f.submit value="登録" %> 32 </div> 33<% end %> 34</div>
ruby
1↓アップローダー 2 3class ImagesUploader < CarrierWave::Uploader::Base 4 5 include CarrierWave::MiniMagick 6 7 #本番環境ではS3へ画像アップロード 8 if Rails.env.development? 9 storage :file 10 elsif Rails.env.test? 11 storage :file 12 else 13 storage :fog 14 end 15 16 def store_dir 17 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 18 end 19 20 #画像リサイズ 21 version :thumb do 22 process resize_to_fill: [180, 180,"Center"] 23 end 24 version :thumb50 do 25 process resize_to_fill: [400, 400,"Center"] 26 end 27 28end 29
ruby
1↓/config/initializers/carrierwave.rb 2 3unless Rails.env.development? || Rails.env.test? 4 CarrierWave.configure do |config| 5 6 config.fog_credentials = { 7 provider: 'AWS', 8 aws_access_key_id: ENV['herokuに設定している環境変数'], 9 aws_secret_access_key: ENV['herokuに設定している環境変数'], 10 region: 'ap-northeast-1' 11 } 12 13 config.fog_directory = 'バケット名' 14 config.asset_host = 'https://バケット名.s3.amazonaws.com' 15 config.cache_storage = :fog 16 config.fog_provider = 'fog/aws' 17 18 end 19end 20
ruby
1↓database.yml 2 3default: &default 4 adapter: postgresql 5 encoding: unicode 6 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 7 8development: 9 <<: *default 10 database: LimeApp_development 11 12test: 13 <<: *default 14 database: LimeApp_test 15 16production: 17 <<: *default 18 adapter: postgresql 19 encoding: unicode 20 pool: 5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。