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

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

ただいまの
回答率

90.04%

本番環境のDBエラーに困っています(rails)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 6,730

yamady

score 172

分からないこと・前提

開発環境:Ruby on Rails 5.0.0.1
本番環境DB:PostgreSQL
サーバー:Heroku

フルスクラッチでUserモデル作成から、Devise使用に移行しました。
ある程度、修復したあとに、Herokuへ本番環境にアップしようとしたら下記エラーが発生しました。

コンソールで「heroku run rake db:migrate」後のメッセージです。

PG::UndefinedTable: ERROR:  relation "users" does not exist

: CREATE TABLE "reviews" ("id" serial primary key, "title" text, "rate" integer, "content" text, "user_id" integer, "space_id" integer, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, CONSTRAINT "fk_rails_74a66bd6c5"
FOREIGN KEY ("user_id")
  REFERENCES "users" ("id")
, CONSTRAINT "fk_rails_ca8b56cfc5"
FOREIGN KEY ("space_id")
  REFERENCES "spaces" ("id")
)

PG::UndefinedTable: ERROR:  relation "users" does not exist

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "users" does not exist
: CREATE TABLE "reviews" ("id" serial primary key, "title" text, "rate" integer, "content" text, "user_id" integer, "space_id" integer, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, CONSTRAINT "fk_rails_74a66bd6c5"
FOREIGN KEY ("user_id")
  REFERENCES "users" ("id")
, CONSTRAINT "fk_rails_ca8b56cfc5"
FOREIGN KEY ("space_id")
  REFERENCES "spaces" ("id")
)

要するに、Userデータベースがないよと言ってくれているんだと思われますが、ローカル環境では問題なく動いています。
ただ、ローカル環境ではSQ Liteを使っています。(よくないですよね、、移行しようとは思いつつもチュートリアルのままに続けていて...)

試してみたこと

下記の回答にあります通り、「bundle exec rake db:migrate」は試してみました。→ 効果なし
https://teratail.com/questions/23996">https://teratail.com/questions/23996

こっちにあります通り、rake db:schema:load RAILS_ENV=production→ rake db:migrate RAILS_ENV=productionを試しましたがやはり無知でした。
http://qiita.com/zaqisuke/items/865fc0eed3ad24dbf3f3

こうした場合どうすればよろしいでしょうか。
取り急ぎ、heroku log は下記です。

2017-05-22T16:15:36.818457+00:00 heroku[run.3331]: State changed from starting to up
2017-05-22T16:15:36.758190+00:00 heroku[run.3331]: Awaiting client
2017-05-22T16:15:36.943760+00:00 heroku[run.3331]: Starting process with command `bundle exec rake db:environment:set RAILS_ENV=production`
2017-05-22T16:15:45.466266+00:00 heroku[run.3331]: State changed from up to complete
2017-05-22T16:15:45.450785+00:00 heroku[run.3331]: Process exited with status 0
2017-05-22T16:15:56.197864+00:00 app[api]: Starting process with command `bundle exec rake db:migrate` by user 
2017-05-22T16:16:10.514584+00:00 heroku[run.8107]: Awaiting client
2017-05-22T16:16:10.755493+00:00 heroku[run.8107]: State changed from starting to up
2017-05-22T16:16:11.138228+00:00 heroku[run.8107]: Starting process with command `bundle exec rake db:migrate`
2017-05-22T16:16:17.923237+00:00 heroku[run.8107]: State changed from up to complete
2017-05-22T16:16:17.893638+00:00 heroku[run.8107]: Process exited with status 1
2017-05-22T16:23:53.041299+00:00 app[api]: Starting process with command `bundle exec rake db:migrate` by user
2017-05-22T16:24:09.707883+00:00 heroku[run.1793]: Awaiting client
2017-05-22T16:24:09.758816+00:00 heroku[run.1793]: Starting process with command `bundle exec rake db:migrate`
2017-05-22T16:24:09.995355+00:00 heroku[run.1793]: State changed from starting to up
2017-05-22T16:24:19.611596+00:00 heroku[run.1793]: State changed from up to complete
2017-05-22T16:24:19.597841+00:00 heroku[run.1793]: Process exited with status 1

追記

$heroku run rake db:migrate

FATAL:  permission denied for database "postgres"
DETAIL:  User does not have CONNECT privilege.

$heroku pg:reset DATABASE

上記2つもうまくいかずです。ローカル環境は動いているのに。。

Rails.application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # Code is not reloaded between requests.
  config.cache_classes = true

  # Eager load code on boot. This eager loads most of Rails and
  # your application in memory, allowing both threaded web servers
  # and those relying on copy on write to perform better.
  # Rake tasks automatically ignore this option for performance.
  config.eager_load = true

  # Full error reports are disabled and caching is turned on.
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # Disable serving static files from the `/public` folder by default since
  # Apache or NGINX already handles this.
  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

  # Compress JavaScripts and CSS.
  config.assets.js_compressor = :uglifier
  # config.assets.css_compressor = :sass

  # Do not fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = false

  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb

  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
  # config.action_controller.asset_host = 'http://assets.example.com'

  # Specifies the header that your server uses for sending files.
  # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX

  # Mount Action Cable outside main process or domain
  # config.action_cable.mount_path = nil
  # config.action_cable.url = 'wss://example.com/cable'
  # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  config.force_ssl = false

  # Use the lowest log level to ensure availability of diagnostic information
  # when problems arise.
  config.log_level = :debug

  # Prepend all log lines with the following tags.
  config.log_tags = [ :request_id ]

  # Use a different cache store in production.
  # config.cache_store = :mem_cache_store

  # Use a real queuing backend for Active Job (and separate queues per environment)
  # config.active_job.queue_adapter     = :resque
  # config.active_job.queue_name_prefix = "spacehacker_app_#{Rails.env}"
  config.action_mailer.perform_caching = false

  # Ignore bad email addresses and do not raise email delivery errors.
  # Set this to true and configure the email server for immediate delivery to raise delivery errors.

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation cannot be found).
  config.i18n.fallbacks = true

  # Send deprecation notices to registered listeners.
  config.active_support.deprecation = :notify

  # Use default logging formatter so that PID and timestamp are not suppressed.
  config.log_formatter = ::Logger::Formatter.new

  # Use a different logger for distributed setups.
  # require 'syslog/logger'
  # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')

  if ENV["RAILS_LOG_TO_STDOUT"].present?
    logger           = ActiveSupport::Logger.new(STDOUT)
    logger.formatter = config.log_formatter
    config.logger = ActiveSupport::TaggedLogging.new(logger)
  end

  # Do not dump schema after migrations.
  config.active_record.dump_schema_after_migration = false
end
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+4

users tableが先に作られていないことによるエラーではないでしょうか。
マイグレーションファイルからdeviceでuserを作るマイグレーションファイルの
名前が先頭にくるようにリネームして(マイグレーションはファイル名順に行われます)
例えば先頭に0を追加して
0000filename
再度
rake db:migrate RAILS_ENV=production
としてみてはいかがでしょう。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/23 10:06

    mokeさま、いつも本当にありがとうございます。
    Railsは読み込みの順番が大切だとよく聞いておりました。今回、000filenameでやってみたところ、うまくいきました。助かります!

    キャンセル

  • 2017/05/23 10:15 編集

    よかったです。
    Rails(レールズ)ですから、他の言語より、はるかに同じところで
    つまづくんですよねー。
    的確なサポートがあれば、これ以上上達の早い言語はないと思います。

    キャンセル

  • 2017/05/23 11:51

    ありがとうございます!
    普段はHTML / CSSを少し書いていただけですが、非常に取り掛かりやすい言語でした。また、調べて解決できるだけWebにナレッジが溜まっているのも非常にありがたいかぎりです(泣

    キャンセル

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

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