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

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

ただいまの
回答率

88.60%

本番環境でcounter_casheエラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 394
退会済みユーザー

退会済みユーザー

前提・実現したいこと

rails歴3ヶ月の初心者です。自作アプリを作成中です。
コメントにいいね機能を実装しました。
いいねボタンを押すと非同期でいいねがついたり消えたりします。
現状ローカル環境であればいいねボタンを押す度にcounter_casheの値が更新されていくのですが、
本番環境だとrollbackされてしまいます。

試したこと

データベースリセットしてもう再度マイグレート 
本番環境のcommentsテーブルをcsvに抽出してみましたが、
likes_countカラムが追加されていませんでした。

発生している問題・エラーメッセージ

モデル、ログ、schema.rbは下記の通りです。

#Likeモデル
class Like < ApplicationRecord
  belongs_to :comment, counter_cache: :likes_count
  belongs_to :user
end

#Commentモデル
class Comment < ApplicationRecord
  belongs_to :court
  belongs_to :user

  has_many :likes, dependent: :destroy
  has_many :liking_users, through: :likes, source: :user
end
#本番環境ログ
2019-04-08T00:35:55.968795+00:00 heroku[router]: at=info method=POST path="/like/1" host=search-court-app.herokuapp.com request_id=84e9d741-a31d-454c-bfbe-4cdb507b2a2f fwd="219.107.8.69" dyno=web.1 connect=1ms service=19ms status=500 bytes=1827 protocol=https
2019-04-08T00:35:55.948704+00:00 app[web.1]: I, [2019-04-08T00:35:55.948594 #4]  INFO -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f] Started POST "/like/1" for 219.107.8.69 at 2019-04-08 00:35:55 +0000
2019-04-08T00:35:55.949633+00:00 app[web.1]: I, [2019-04-08T00:35:55.949532 #4]  INFO -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f] Processing by LikesController#like as JS
2019-04-08T00:35:55.949699+00:00 app[web.1]: I, [2019-04-08T00:35:55.949641 #4]  INFO -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f]   Parameters: {"comment_id"=>"1"}
2019-04-08T00:35:55.953196+00:00 app[web.1]: D, [2019-04-08T00:35:55.953103 #4] DEBUG -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f]   Comment Load (1.2ms)  SELECT  "comments".* FROM "comments" WHERE "comments"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
2019-04-08T00:35:55.955527+00:00 app[web.1]: D, [2019-04-08T00:35:55.955456 #4] DEBUG -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f]   User Load (1.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 2], ["LIMIT", 1]]
2019-04-08T00:35:55.957760+00:00 app[web.1]: D, [2019-04-08T00:35:55.957675 #4] DEBUG -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f]    (1.0ms)  BEGIN
2019-04-08T00:35:55.959851+00:00 app[web.1]: D, [2019-04-08T00:35:55.959765 #4] DEBUG -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f]   Comment Load (1.4ms)  SELECT  "comments".* FROM "comments" WHERE "comments"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
2019-04-08T00:35:55.962150+00:00 app[web.1]: D, [2019-04-08T00:35:55.962073 #4] DEBUG -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f]   Like Create (1.3ms)  INSERT INTO "likes" ("user_id", "comment_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["user_id", 2], ["comment_id", 1], ["created_at", "2019-04-08 00:35:55.960206"], ["updated_at", "2019-04-08 00:35:55.960206"]]
2019-04-08T00:35:55.963641+00:00 app[web.1]: D, [2019-04-08T00:35:55.963512 #4] DEBUG -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f]    (1.0ms)  ROLLBACK
2019-04-08T00:35:55.964146+00:00 app[web.1]: I, [2019-04-08T00:35:55.964078 #4]  INFO -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f] Completed 500 Internal Server Error in 14ms (ActiveRecord: 7.3ms)
2019-04-08T00:35:55.964992+00:00 app[web.1]: F, [2019-04-08T00:35:55.964918 #4] FATAL -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f]
2019-04-08T00:35:55.965063+00:00 app[web.1]: F, [2019-04-08T00:35:55.964989 #4] FATAL -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f] ActiveModel::MissingAttributeError (can't write unknown attribute `likes_count`):
2019-04-08T00:35:55.965118+00:00 app[web.1]: F, [2019-04-08T00:35:55.965057 #4] FATAL -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f]
2019-04-08T00:35:55.965175+00:00 app[web.1]: F, [2019-04-08T00:35:55.965119 #4] FATAL -- : [84e9d741-a31d-454c-bfbe-4cdb507b2a2f] app/controllers/likes_controller.rb:6:in `like'

#ローカル環境ログ
Started POST "/like/22" for 127.0.0.1 at 2019-04-08 10:06:39 +0900
Processing by LikesController#like as JS
  Parameters: {"comment_id"=>"22"}
  Comment Load (0.3ms)  SELECT  `comments`.* FROM `comments` WHERE `comments`.`id` = 22 LIMIT 1
  ↳ app/controllers/likes_controller.rb:17
  User Load (0.4ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
  ↳ app/controllers/likes_controller.rb:5
   (0.1ms)  BEGIN
  ↳ app/controllers/likes_controller.rb:6
  Comment Load (0.3ms)  SELECT  `comments`.* FROM `comments` WHERE `comments`.`id` = 22 LIMIT 1
  ↳ app/controllers/likes_controller.rb:6
  Like Create (0.3ms)  INSERT INTO `likes` (`user_id`, `comment_id`, `created_at`, `updated_at`) VALUES (1, 22, '2019-04-08 01:06:39', '2019-04-08 01:06:39')
  ↳ app/controllers/likes_controller.rb:6
  Comment Update All (0.3ms)  UPDATE `comments` SET `likes_count` = COALESCE(`likes_count`, 0) + 1 WHERE `comments`.`id` = 22
  ↳ app/controllers/likes_controller.rb:6
   (4.0ms)  COMMIT
  ↳ app/controllers/likes_controller.rb:6
  Rendering likes/like.js.erb
  Like Load (0.3ms)  SELECT  `likes`.* FROM `likes` WHERE `likes`.`user_id` = 1 AND `likes`.`comment_id` = 22 LIMIT 1
  ↳ app/views/likes/_like.html.erb:2
   (0.2ms)  SELECT COUNT(*) FROM `likes` WHERE `likes`.`comment_id` = 22
  ↳ app/views/likes/_like.html.erb:4
  Rendered likes/_like.html.erb (4.8ms)
  Rendered likes/like.js.erb (25.2ms)
Completed 200 OK in 101ms (Views: 66.2ms | ActiveRecord: 6.2ms)
#schema.rb
  create_table "comments", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
    t.string "text"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "court_id"
    t.integer "user_id"
    t.integer "likes_count"
  end

回答よろしくお願い致します。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • 退会済みユーザー

    退会済みユーザー

    2019/04/09 09:10

    うーん、ではDBが壊れているのかもしれないですね...
    DBを再構築してバックアップをリストアすれば直るかもしれません。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2019/04/09 10:05

    もう一度試してみます。
    回答ありがとうございます。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2019/04/30 10:09

    capistranoを利用しておりcurrentフォルダでdb削除→作成→マイグレートでカラム追加できました。
    回答ありがとうございました。

    キャンセル

回答 1

checkベストアンサー

0

本番環境のDBをCSV化して確認したときにカラムがなったということは、テーブルにカラムがないので、DBをいくらリストアしても結果は変わらないように思えます。
あらためて、本番環境で bin/rails r -e production 'p Comment.column_names' としてカラムが入っているか確認してみてください。
入っていなければ migrate でカラムを追加してみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/04/30 10:09

    capistranoを利用しておりcurrentフォルダでdb削除→作成→マイグレートでカラム追加できました。
    回答ありがとうございました。

    キャンセル

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

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

関連した質問

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