web-dev-qa-db-ja.com

Rails 4.0.1 Herokuの場合、データベースを作成できません

Heroku上のRails 4.0.1アプリで実行するためにrake db:migrateを取得できません。

Postgresを適切に構成していないと思いますが、herokuのドキュメントを読んでも効果がなく、どうすればよいかわかりません。 herokuやpostgresについてはあまり知りません。

ヘルプやリソースをいただければ幸いです。他に投稿できることがあれば、お知らせください。

(また、問題がある場合は、私はdeviseを使用しています)

heroku run rake db:migrateを実行すると、次のようになります。

Running `rake db:migrate` attached to terminal... up, run.5077
PG::UndefinedTable: ERROR:  relation "users" does not exist
LINE 5:                WHERE a.attrelid = '"users"'::regclass
                                      ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                 pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
            FROM pg_attribute a LEFT JOIN pg_attrdef d
              ON a.attrelid = d.adrelid AND a.attnum = d.adnum
           WHERE a.attrelid = '"users"'::regclass
             AND a.attnum > 0 AND NOT a.attisdropped
           ORDER BY a.attnum

rake aborted!
PG::UndefinedTable: ERROR:  relation "users" does not exist
LINE 5:                WHERE a.attrelid = '"users"'::regclass
                                      ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                 pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
            FROM pg_attribute a LEFT JOIN pg_attrdef d
              ON a.attrelid = d.adrelid AND a.attnum = d.adnum
           WHERE a.attrelid = '"users"'::regclass
             AND a.attnum > 0 AND NOT a.attisdropped
           ORDER BY a.attnum

heroku run rake db:setupを実行すると、次のようになります。

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

... stack trace ...

Couldn't create database for {"adapter"=>"postgresql", "username"=>"aqofwrwjifcqkx", "password"=>"7yqDAx1L_4HFhw7WV3PH7ZrKyM", "port"=>5432, "database"=>"d5dvi0pjk7dgr7", "Host"=>"ec2-23-21-94-137.compute-1.amazonaws.com"}

その後に同じPG :: UndefinedTable ERRORリレーション 'users'が存在しません

database.yml:

development:
  adapter: sqlite3
  encoding: unicode
  database: chore_app_development
  pool: 5

test:
  adapter: sqlite3
  encoding: unicode
  database: chore_app_test
  pool: 5

production:
  adapter: postgresql
  database: chore_app_production
  pool: 5
  timeout: 5000

Gemfile:

source 'https://rubygems.org'
Ruby '2.0.0'

gem 'Rails', '4.0.1'

# Database
group :production do
  gem 'pg'
end

group :development, :test do
  gem 'sqlite3'
end

# Assets
gem 'sass-Rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'turbolinks'
gem 'haml-Rails'
gem 'jquery-Rails'

# Heroku
gem 'Rails_12factor', group: :production

# Application
gem 'devise'
gem 'formtastic'

# Testing
gem 'factory_girl_Rails'
17
user2043725

スタックトレースをもっと詳しく読む必要があります。私のfactories.rbは、他のファクトリの属性としてユーザーオブジェクトを作成していました。それらをブロックで包むことで修正されました:

FactoryGirlはrake db:migrateプロセスを台無しにします

5
user2043725

最初に試してみる

heroku restart

heroku rake db:migrate

それがうまくいかない場合は、試してください。

heroku pg:reset DATABASE_URL   #Literally type in heroku pg:reset DATABASE_URL

heroku rake db:migrate
48
jason328

走る

heroku pg:reset DATABASE_URL

これで完了です。

4
Saqib R.

Jasonの回答で問題が解決する可能性がありますが、エラーが発生した理由と修正方法を詳しく説明します。

  1. Herokuで「rake db:setup」を実行することはできません。これは、データベースを作成しようとし、データベースがHerokuにすでに存在しているためです。

  2. Database.ymlで、次のような環境変数からデータベースのURLを読み取る必要があります:production:url: <%= ENV["DATABASE_URL"] %>

  3. 移行にいくつかのバージョンエラーがあるため、2番目のエラーが発生していると思います。最初から実行すると修正されます:rake db:migrate VERSION=0

3
Eduardo Veras

データベースを削除して再作成するには

  1. ターミナルでherokuにログイン
  2. アプリにcdします
  3. 走る

heroku pg:reset DATABASE

0