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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

解決済

2回答

1123閲覧

AWSでCapistranoを使って自動デプロイをしたらエラーが出た

75ks

総合スコア4

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

0クリップ

投稿2020/08/27 08:49

編集2020/08/27 10:24

AWSのEC2で、Capistranoを使って自動デプロイ

投稿の一覧、詳細、作成、保存、編集、更新、削除の実装までは問題なく自動デプロイできていましたが、deviseを使ってusersテーブルを作成し、ユーザー管理機能を実装してから自動デプロイしたら、エラーが表示されました。

エラーが表示されるのは、投稿ボタンを押した時です。
ログイン、新規登録は本番環境でも問題なく機能しています。

デプロイの手順は、

  1. github desktopでcommit, pushをする。
  2. ターミナルで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 %>

ユーザー管理機能を実装したのに、ログイン、新規登録機能は問題なく、投稿作成機能が機能していないのが引っかかります。
よろしくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

db/migrateのremove_user_from_posts.rbを削除して、開発環境でrails db:migrate:resetを実行して、commit, pushし、デプロイしてから、本番環境でrails db:migrate:reset RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1を実行したところ上手くいきました。

投稿2020/08/27 11:16

75ks

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

見やすくなりました!

要はココですね

[5d2cfbac-f188-4547-bb8d-b34e1b247370] ActiveModel::UnknownAttributeError (unknown attribute 'user_id' for Post.):
[5d2cfbac-f188-4547-bb8d-b34e1b247370]
[5d2cfbac-f188-4547-bb8d-b34e1b247370] app/controllers/posts_controller.rb:14:in `create'

本番環境のdb:migrateは済んでいますか?

投稿2020/08/27 08:56

編集2020/08/27 09:08
naokit-dev

総合スコア424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

75ks

2020/08/27 09:04

ご指摘ありがとうございます。 URLを削除し、マークダウンで修正致しました。
75ks

2020/08/27 09:47

はい、しております。 調べてみたところ、postsテーブルにuser_idカラムが設定されていないみたいです。
naokit-dev

2020/08/27 09:52

一応確認なんですが、ローカル環境では動作しているのですよね 当該の model, view, controllerのソースもみたいです
75ks

2020/08/27 10:30

追加しました! ローカルでは動作しています。 postsテーブルにuser_idを追加した時になぜか重複しているとメッセージが出たので、migrationファイルは残して記述を削除したのでこれが原因だと思われます。 一度ターミナルでuser_idをremoveしてから再度addしようとして、rails g migrationコマンドを実行しましたが、user_idを再度addするときcreateではなく、identicalと表示されました。 日付が変わっているので追加されていると思い、commit, push, git pull origin masterをし、データベースをdrop, create, migrateし、Unicornのプロセスをkillし、bundle exec cap production deployを実行しましたが追加できていませんでした。
naokit-dev

2020/08/27 11:16

> postsテーブルにuser_idを追加した時になぜか重複しているとメッセージが出たので、migrationファイルは残して記述を削除したのでこれが原因だと思われます。 migrateionファイルが空ではdb:migrateした際にデータベースに変更が加えられません db/schema.rb を参照して必要なカラムが追加されていないようでしたら 上記が原因かと思われます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問