AWSのEC2で、Capistranoを使って自動デプロイ
投稿の一覧、詳細、作成、保存、編集、更新、削除の実装までは問題なく自動デプロイできていましたが、deviseを使ってusersテーブルを作成し、ユーザー管理機能を実装してから自動デプロイしたら、エラーが表示されました。
エラーが表示されるのは、投稿ボタンを押した時です。
ログイン、新規登録は本番環境でも問題なく機能しています。
デプロイの手順は、
- github desktopでcommit, pushをする。
- ターミナルでEC2にログインし、以下を実行
terminal
1rails db:drop RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 2rails db:create RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 3ps aux | grep unicorn 4kill <unicornのプロセス>
3.ターミナル(ローカル)で以下を実行
terminal
1bundle exec cap production deploy
以下はless shared/log/production.log
を実行したときの最新のログです。
terminal
1I, [2020-08-27T08:58:29.351338 #1720] INFO -- : [5d2cfbac-f188-4547-bb8d-b34e1b247370] Started POST "/posts" for 131.147.51.47 at 2020-08-27 08:58:29 +0000 2I, [2020-08-27T08:58:29.351988 #1720] INFO -- : [5d2cfbac-f188-4547-bb8d-b34e1b247370] Processing by PostsController#create as HTML 3I, [2020-08-27T08:58:29.352071 #1720] INFO -- : [5d2cfbac-f188-4547-bb8d-b34e1b247370] Parameters: {"authenticity_token"=>"2yJwSfXk9yKSODwhcC5EWygFo/oBKS9azS0OMrtC/LnTYN6/9YAz+U3tHCN+fFOhX7Um+NyJIpJzkt6Mzaz0PQ==", "post"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x00000000074dc680 @tempfile=#<Tempfile:/tmp/RackMultipart20200827-1720-1n69mmi.png>, @original_filename="cap.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"post[image]\"; filename=\"cap.png\"\r\nContent-Type: image/png\r\n">, "text"=>"test"}, "commit"=>"投稿する"} 4D, [2020-08-27T08:58:29.353627 #1720] DEBUG -- : [5d2cfbac-f188-4547-bb8d-b34e1b247370] ESC[1mESC[36mUser Load (0.4ms)ESC[0m ESC[1mESC[34mSELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1ESC[0m 5I, [2020-08-27T08:58:29.354283 #1720] INFO -- : [5d2cfbac-f188-4547-bb8d-b34e1b247370] Completed 500 Internal Server Error in 2ms (ActiveRecord: 0.4ms | Allocations: 778) 6F, [2020-08-27T08:58:29.354723 #1720] FATAL -- : [5d2cfbac-f188-4547-bb8d-b34e1b247370] 7[5d2cfbac-f188-4547-bb8d-b34e1b247370] ActiveModel::UnknownAttributeError (unknown attribute 'user_id' for Post.): 8[5d2cfbac-f188-4547-bb8d-b34e1b247370] 9[5d2cfbac-f188-4547-bb8d-b34e1b247370] app/controllers/posts_controller.rb:14:in `create' 10(END) 11
model
1class Post < ApplicationRecord 2 has_one_attached :image 3 belongs_to :user 4 5 with_options presence: true do 6 validates :text 7 validates :image 8 validates :user 9 end 10end 11
controller
1class PostsController < ApplicationController 2 before_action :set_post, only: [:show, :destroy, :edit, :update] 3 before_action :correct_user, only: [:edit, :update] 4 5 def index 6 @posts = Post.all.order("created_at DESC") 7 end 8 9 def new 10 @post = Post.new 11 end 12 13 def create 14 @post = Post.new(post_params) 15 if @post.valid? 16 @post.save 17 flash[:notice] = "投稿が完了しました" 18 redirect_to root_path 19 else 20 flash.now[:alert] = "投稿に失敗しました" 21 render :new 22 end 23 end 24 25 def show 26 end 27 28 def destroy 29 if @post.destroy 30 flash[:notice] = "削除が完了しました" 31 redirect_to root_path 32 else 33 flash.now[:alert] = "削除に失敗しました" 34 render :show 35 end 36 end 37 38 def edit 39 end 40 41 def update 42 if @post.update(post_params) 43 flash[:notice] = "編集が完了しました" 44 redirect_to post_path(@post.id) 45 else 46 flash.now[:alert] = "編集に失敗しました" 47 render :edit 48 end 49 end 50 51 private 52 53 def post_params 54 params.require(:post).permit(:text, :image).merge(user_id: current_user.id) 55 end 56 57 def set_post 58 @post = Post.find(params[:id]) 59 end 60 61 def correct_user 62 unless user_signed_in? && current_user.id == @post.user.id 63 redirect_to root_path 64 end 65 end 66end 67
viewindex
1<%= render "shared/header"%> 2 3<div class="main"> 4 <div class="post-contents"> 5 <ul class="post-lists"> 6 <% @posts.each do |post| %> 7 <li class="list"> 8 <span>@<%= post.user.nickname %></span> 9 <%= link_to post_path(post.id) do %> 10 <%= image_tag post.image.variant(resize:'500x500'), class:"post-image" %> 11 <% end %> 12 <div class="heart-btn"> 13 <%= image_tag "heart.png", class:"heart-icon" %> 14 <span class="heart-count">0</span> 15 </div> 16 <p class="post-text"> 17 <%= post.text %> 18 </p> 19 </li> 20 <% end %> 21 </ul> 22 </div> 23</div> 24<%= link_to new_post_path do %> 25 <div class="new-post-btn btn"> 26 <span class="new-post-btn-text btn-text">投稿</span> 27 </div> 28<% end %>
ユーザー管理機能を実装したのに、ログイン、新規登録機能は問題なく、投稿作成機能が機能していないのが引っかかります。
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。