Rails 4.0.1 on Heroku, can't create database

2019-02-01 10:31发布

I can't get rake db:migrate to run on my rails 4.0.1 app on Heroku.

I'm guessing that I don't have postgres configured properly... but reading the docs on heroku hasn't really helped and I'm not sure what to do. I don't know too much about heroku or postgres.

Any help or resources would be greatly appreciated. Let me know if there's anything else I can post.

(Also, I'm using devise, if that matters)

When I run heroku run rake db:migrate I get this:

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

When I run heroku run rake db:setup I get this:

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"}

followed by the same PG::UndefinedTable ERROR relation 'users' does not exist

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'

5条回答
女痞
2楼-- · 2019-02-01 10:42

I would first try

heroku restart

heroku rake db:migrate

If that doesn't work, then try.

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

heroku rake db:migrate
查看更多
不美不萌又怎样
3楼-- · 2019-02-01 10:45

Jason's answer might fix your problem, but I wanted to expand on why you got the error and how to fix it.

  1. You can't run "rake db:setup" on Heroku, because it will try to create a database, and your database already exists on Heroku

  2. In your database.yml, you should read the database url from the environment variable like: production: url: <%= ENV["DATABASE_URL"] %>

  3. I think you are getting the 2nd error because you have some version error in your migrations, runing them from the begining should fix it : rake db:migrate VERSION=0

查看更多
做自己的国王
4楼-- · 2019-02-01 10:48

To drop and recreate database

  1. Login to heroku in terminal
  2. cd into your app
  3. Run

heroku pg:reset DATABASE

查看更多
Rolldiameter
5楼-- · 2019-02-01 11:02

I should've read the stack trace more closely. My factories.rb was creating user objects as attributes for other factories. Wrapping them in a block fixed it:

FactoryGirl screws up rake db:migrate process

查看更多
ら.Afraid
6楼-- · 2019-02-01 11:05

Run

heroku pg:reset DATABASE_URL

and you are done.

查看更多
登录 后发表回答