2015-08-02 1 views
3

J'ai une application Rails appelée "enrollment_app" qui initialise et remplit toutes les tables de la base de données avec un fichier seed MySQL. J'ai construit l'application, ajouté quelques migrations et poussé mon application vers Heroku. Cependant, comme Heroku utilise Postgres, j'ai besoin d'un moyen de rendre ma base de données MySQL compatible avec Heroku, donc j'utilise l'addon ClearDB.Déployer une application rails en utilisant MySQL à Heroku en utilisant l'addon ClearDB

Lorsque je tente d'ouvrir l'application cependant, je reçois le message:

Application Error 
An error occurred in the application and your page could not be served. Please try again in a few moments. 

If you are the application owner, check your logs for details. 

Alors, j'ai vérifié les journaux et cette erreur:

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

J'ai suivi avec ce tutorial mais apparemment je ne sais pas comment faire pour que ClearDB ressemble à ma base de données MySQL locale puisque je reçois cette erreur ci-dessus. Comment est-ce que je peux faire l'équivalent de rake db:seed le dossier de graine de MySQL et rake db:migrate à la base de données de production ClearDB?

Mise à jour - Gemfile:

source 'https://rubygems.org' 

gem 'rails', '4.2.1' 
gem 'mysql2' 
gem 'sass-rails', '~> 5.0' 
gem 'uglifier', '>= 1.3.0' 
gem 'coffee-rails', '~> 4.1.0' 
gem 'jquery-rails' 
gem 'turbolinks' 
gem 'jbuilder', '~> 2.0' 
gem 'sdoc', '~> 0.4.0', group: :doc 
gem 'bootstrap-sass', '~> 3.3.5' 
gem 'bootswatch-rails' 
gem 'ransack' 
gem 'jquery-turbolinks' 
gem 'kaminari' 
gem 'bootstrap-kaminari-views' 
gem 'jquery-ui-rails' 
gem 'espinita' 
gem 'mysqltopostgres', git: "https://github.com/maxlapshin/mysql2postgres.git" 

group :development, :test do 
    gem 'byebug' 
    gem 'web-console', '~> 2.0' 
    gem 'spring' 
    gem 'rspec-rails' 
    gem 'launchy' 
    gem 'pry' 
    gem 'pry-nav' 
    gem 'shoulda-matchers' 
    gem 'factory_girl_rails' 
    gem 'capybara' 
    gem 'newrelic_rpm' 
    gem 'poltergeist' 
    gem 'database_cleaner' 
end 

group :production do 
    gem 'rails_12factor' 
end 
+0

'PG :: UndefinedTable' est une erreur de la PG (Postgres) gemme. Avez-vous mis à jour votre Gemfile pour utiliser la gem mysql? Voir cette partie du guide: https://devcenter.heroku.com/articles/cleardb#local-setup – elithrar

+0

Oui, j'ai retiré le 'pg gem' de mon gemfile, j'ai rebondi, je l'ai poussé vers heroku, puis j'ai couru' heroku run rake db: create 'mais a cette erreur: 'LoadError: impossible de charger un tel fichier - pg'. Puis j'ai essayé de mettre l'URL de la base de données heroku à mysql2 et j'ai trouvé ceci dans mes journaux heroku: Impossible de détruire la dernière pièce jointe à l'application de facturation pour la ressource somnoler-2184' –

+0

Pouvez-vous poster votre dernière Gemfile? – elithrar

Répondre

3

Ce n'est pas un problème avec ClearDB en tant que tel, il semble que vous n'êtes pas complètement divorcé des valeurs par défaut PostgreSQL. Je voudrais vérifier:

  • est pg est défini dans votre Gemfile? ça ne devrait pas être. Assurez-vous plutôt que mysql2 est présent.
  • Avez-vous installé le module complémentaire Heroku ClearDB pour cette application, et en avez-vous fait la base de données par défaut que votre application utilisera? Avez-vous désinstallé la base de données Heroku Postgres? See here pour des instructions complètes.

Une fois votre application Heroku peut se connecter à la base de données ClearDB correctement, vous devriez être en mesure de mettre en place la base de données elle-même sans problème:

heroku run rake db:create 
heroku run rake db:migrate 
heroku run rake db:seed 
+0

Merci de poster, je n'avais pas supprimé ma base de données Heroku Postgres. Je l'ai fait juste maintenant. J'ai ensuite défini ma nouvelle base de données via 'heroku config: set' et ajouté un" 2 "après" mysql "car mon Gemfile utilise mysql2. Mais quand je lance 'heroku run rake db: create', j'obtiens l'erreur:' LoadError: impossible de charger un tel fichier - pg'. Je suis confus parce que si je recherche "pg" dans mon projet, il y a 0 résultats ... Donc je ne sais pas pourquoi un fichier pg est en train d'être chargé en premier lieu. J'ai posté mon Incase Gemfile qui aide. –

+0

Ok donc basé sur d'autres infos sur Internet, j'ai mis 'pg' gem dans mon Gemfile qui s'est débarrassé de cette erreur. Et ça m'a permis de lancer 'heroku run rake db: create' et' heroku run rake db: seed' avec succès (je cours ça avant mes migrations, que je dois pousser après l'ensemencement). Mais ensuite, quand j'ajoute les fichiers de migration, puis que j'exécute 'heroku rake db: migrate', j'obtiens cette erreur:' Mysql2 :: Error: La table 'heroku_74f570faead6d61.eligibility_states' n'existe pas: ALTER TABLE 'eligibility_states''. Savez-vous pourquoi mes tables ne sont pas chargées dans le fichier de départ (où elles sont définies, en cours de développement)? –

+0

Si vous faites 'heroku pg: status', j'ai le sentiment que vous avez créé ceux de Postgres (étant donné que vous avez ajouté la gemme et qu'elle a fonctionné). – elithrar