web-dev-qa-db-fra.com

Rails 4.0.1 sur Heroku, impossible de créer une base de données

Je ne parviens pas à faire rake db: migrer sur mon application Rails 4.0.1 sous Heroku.

Je suppose que postgres n'est pas configuré correctement ... mais la lecture de la documentation sur heroku n'a pas vraiment aidé et je ne sais pas quoi faire. Je ne sais pas trop sur heroku ou postgres.

Toute aide ou ressource serait grandement appréciée. Faites-moi savoir s'il y a autre chose que je peux poster.

(En outre, j'utilise le concept, si cela compte)

Quand je lance heroku run rake db:migrate je reçois ceci:

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

Quand je lance heroku run rake db:setup je reçois ceci:

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

suivi de la même relation PG :: UndefinedTable ERREUR 'utilisateurs' n'existe pas

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'
15
user2043725

J'aurais dû lire la trace de la pile de plus près. Mon factories.rb créait des objets utilisateur en tant qu'attributs pour d'autres fabriques. En les enveloppant dans un bloc, cela a résolu le problème:

FactoryGirl visse rake db: processus de migration

5
user2043725

Je voudrais d'abord essayer 

heroku restart

heroku rake db:migrate

Si cela ne fonctionne pas, alors essayez.

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

heroku rake db:migrate
47
jason328

Courir

heroku pg:reset DATABASE_URL

et vous avez terminé.

4
Saqib R.

La réponse de Jason pourrait résoudre votre problème, mais je voulais expliquer pourquoi vous avez eu l'erreur et comment y remédier.

  1. Vous ne pouvez pas exécuter "rake db: setup" sur Heroku, car il essaiera de créer une base de données et votre base de données existe déjà sur Heroku.

  2. Dans votre database.yml, vous devez lire l'URL de la base de données à partir de la variable d'environnement, telle que: Production: url: <%= ENV["DATABASE_URL"] %>

  3. Je pense que vous obtenez la 2e erreur parce que vous avez une erreur de version dans vos migrations, leur exécution depuis le début devrait résoudre le problème: rake db:migrate VERSION=0

2
Eduardo Veras

Pour supprimer et recréer une base de données

  1. Connectez-vous à heroku dans le terminal 
  2. cd dans votre application
  3. Courir

heroku pg: réinitialiser la base de données

0
Saraswathy Renuga