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'
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:
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
Courir
heroku pg:reset DATABASE_URL
et vous avez terminé.
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.
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.
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"] %>
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
Pour supprimer et recréer une base de données
heroku pg: réinitialiser la base de données