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

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

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

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

Ruby

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

3967閲覧

herokuデプロイ後、DBが上手く機能しない

nakajima777

総合スコア2

Ruby on Rails 5

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

Ruby

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/08/05 07:15

前提・実現したいこと

herokuデプロイ後に正常にアプリを動かしたい。(ローカルでは問題なく動いています)

ローカルでairbnbのようなアプリを作成しており、
ローカルでは問題なく動いている状況ですが、herokuにデプロイしたら機能しなくなりました。

https://qiita.com/hmmrjn/items/e2dff8036fbbd74f049a

上記サイトなどを参考にしていますがエラーが解消されません。

ローカルではSQLite、heroku上ではPostgreSQLを使用しているためエラーが起きていると考えています。

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

$ heroku logs で以下のエラーが表示されています。

イメージ説明

ActionView::Template::Error (PG::UndefinedColumn: ERROR: column photos.camera_id does not exist

こちらのphotos.camera_idが存在しないことがエラー原因だと認識しています。

該当のソースコード

schema.rb

1create_table "cameras", force: :cascade do |t| 2 t.string "camera_type" 3 t.string "company_type" 4 t.string "use_history" 5 t.string "condition" 6 t.string "listing_name" 7 t.text "summary" 8 t.string "address" 9 t.boolean "is_camera_case" 10 t.boolean "is_camera_leg" 11 t.boolean "is_light" 12 t.integer "price" 13 t.boolean "active" 14 t.integer "user_id" 15 t.datetime "created_at", null: false 16 t.datetime "updated_at", null: false 17 t.float "latitude" 18 t.float "longitude" 19 t.index ["user_id"], name: "index_cameras_on_user_id" 20 end 21 22create_table "photos", force: :cascade do |t| 23 t.integer "camera_id" 24 t.datetime "created_at", null: false 25 t.datetime "updated_at", null: false 26 t.string "image_file_name" 27 t.string "image_content_type" 28 t.integer "image_file_size" 29 t.datetime "image_updated_at" 30 t.index ["camera_id"], name: "index_photos_on_camera_id" 31 end

_camera_menu.html.erb(該当箇所)

1<li class="sidebar-item"> 2 <%= link_to "Camera紹介", description_camera_path, class: "sidebar-link active" %> 3 <% if !@camera.listing_name.blank? %> 4 <span class="pull-right text-babu"><i class="fa fa-check"></i></span> 5 <% end %> 6 </li>

photos_controller.rb

1class PhotosController < ApplicationController 2 3 def create 4 @camera = Camera.find(params[:camera_id]) 5 6 if params[:images] 7 params[:images].each do |img| 8 @camera.photos.create(image: img) 9 end 10 11 @photos = @camera.photos 12 redirect_back(fallback_location: request.referer, notice: "アップロードできました!") 13 end 14 end 15 16 def destroy 17 @photo = Photo.find(params[:id]) 18 @camera = @photo.camera 19 20 @photo.destroy 21 @photos = Photo.where(camera_id: @camera.id) 22 23 respond_to :js 24 end 25end 26 27 28```cameras_controller.rb 29class CamerasController < ApplicationController 30 before_action :set_camera, except: [:index, :new, :create] 31 before_action :authenticate_user!, except: [:show] 32 before_action :is_authorised, only: [:listing, :pricing, :description, :photo_upload, :amenities, :location, :update] 33 34 def index 35 @cameras = current_user.cameras 36 end 37 38 def new 39 @camera = current_user.cameras.build 40 end 41 42 def create 43 @camera = current_user.cameras.build(camera_params) 44 if @camera.save 45 redirect_to listing_camera_path(@camera), notice: "登録しました!" 46 else 47 flash[:alert] = "登録できていません!" 48 render :new 49 end 50 end 51 52 def show 53 @photos = @camera.photos 54 @guest_reviews = @camera.guest_reviews 55 end 56 57 def listing 58 end 59 60 def pricing 61 end 62 63 def description 64 end 65 66 def photo_upload 67 @photos = @camera.photos 68 end 69 70 def amenities 71 end 72 73 def location 74 end 75 76 def update 77 78 new_params = camera_params 79 new_params = camera_params.merge(active: true) if is_ready_camera 80 81 if @camera.update(camera_params) 82 flash[:notice] = "保存しました!" 83 else 84 flash[:alert] = "保存できていません!" 85 end 86 redirect_back(fallback_location: request.referer) 87 end 88 89 90 # --- Reservations --- 91 def preload 92 today = Date.today 93 reservations = @camera.reservations.where("start_date >= ? OR end_date >= ?", today, today) 94 95 render json: reservations 96 end 97 98 def preview 99 start_date = Date.parse(params[:start_date]) 100 end_date = Date.parse(params[:end_date]) 101 102 output = { 103 conflict: is_conflict(start_date, end_date, @camera) 104 } 105 106 render json: output 107 end 108 109 def your_trips 110 @trips = current_user.reservations.order(start_date: :asc) 111 end 112 113 def your_reservations 114 @cameras = current_user.cameras 115 end 116 117 118 private 119 120 def is_conflict(start_date, end_date, camera) 121 check = camera.reservations.where("? < start_date AND end_date < ?", start_date, end_date) 122 check.size > 0? true : false 123 end 124 125 def set_camera 126 @camera = Camera.find(params[:id]) 127 end 128 129 def is_authorised 130 redirect_to root_path, alert: "You don't have permission" unless current_user.id == @camera.user_id 131 end 132 133 def is_ready_camera 134 !@camera.active && !@camera.price.blank? && !@camera.listing_name.blank? && !@camera.photos.blank? && !@camera.address.blank? 135 end 136 137 def camera_params 138 params.require(:camera).permit(:camera_type, :company_type, :use_history, :condition, :listing_name, :summary, :address, :is_camera_case, :is_camera_leg, :is_light, :price, :active, :latitude, :longitude) 139 end 140end 141 142``` 143 144### 試したこと 145 146ググった結果、DB周辺が怪しいと思い、いじってみるが解消されず。 147 148何かアドバイスあればよろしくお願いします。 149 150足りないソース等については提示させて頂きます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

データベースのテーブルの列がないというエラーが出ています

console

1ActionView::Template::Error (PG::UndefinedColumn: ERROR: column photos.camera_id does not exist)

1

データベースマイグレーションを実行しましたか?
参考:
Migrate your database | Getting Started on Heroku with Rails 6.x | Heroku Dev Center
Getting Started on Heroku with Ruby | Heroku Dev Center

2

Heroku 上でのデータベース接続設定を
database.yml ではなく DATABASE_URL で一元的に設定していますか?

参考: Rails Database Connection Behavior | Heroku Dev Center

3

heroku run rake db:migrate を実行したときに、なにかエラーは表示されませんでしたか?

投稿2020/08/05 07:28

編集2020/08/05 07:52
y_shinoda

総合スコア3272

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

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

nakajima777

2020/08/05 07:35

回答ありがとうございます。 heroku run rake db:migrate 上記コマンドは実行済です。 記入していなくて申し訳ありません。
y_shinoda

2020/08/05 07:53

回答を追記しました
nakajima777

2020/08/05 08:12

Heroku 上でのデータベース接続設定を database.yml ではなく DATABASE_URL で一元的に設定していますか? 上記の設定ができていなかったので、下記サイトを参考に設定しました。 https://qiita.com/NaokiIshimura/items/550ca82e8e57aaea5582 そのherokuへデプロイしマイグレーションしましたがエラーは変わらずでした。 マイグレーション実行時の動きは下記になります。 Running rake db:migrate on ⬢ share-camera... up, run.7851 (Free) D, [2020-08-05T08:10:44.266004 #4] DEBUG -- : (1.1ms) SELECT pg_try_advisory_lock(5215770222911144505) D, [2020-08-05T08:10:44.282081 #4] DEBUG -- : (1.6ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC D, [2020-08-05T08:10:44.292958 #4] DEBUG -- : ActiveRecord::InternalMetadata Load (1.4ms) SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2 [["key", "environment"], ["LIMIT", 1]] D, [2020-08-05T08:10:44.302026 #4] DEBUG -- : (1.1ms) BEGIN D, [2020-08-05T08:10:44.304233 #4] DEBUG -- : (1.1ms) COMMIT D, [2020-08-05T08:10:44.306356 #4] DEBUG -- : (1.9ms) SELECT pg_advisory_unlock(5215770222911144505)
y_shinoda

2020/08/05 08:21

ログを見た感じでは PostgreSQL に正しく接続できているように見えますね もし、Heroku 上のデータにまだ必要なものがなければ、ですが、 一旦データベースをリセットして、もう一度マイグレーションをすべて走らせてみるのはいかがでしょうか? データベースのリセットは次の方法でできるようです https://devcenter.heroku.com/articles/heroku-postgresql#pg-reset https://stackoverflow.com/a/32057707/12721873
nakajima777

2020/08/05 08:33

おおお!! DBをリセットしたらできました。 本当にありがとうございます!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問