J'ai cherché toutes les solutions pour ce problème pendant des heures, mais je n'arrive tout simplement pas à le faire fonctionner.
J'ai une application Rails et j'essaie de la déployer sur heroku, mais lorsque j'exécute heroku run rake db: migrate
, j'obtiens cette erreur:
# database.yml --- default: adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: adapter: postgresql database: chamada_development encoding: unicode password: "<%= ENV['CHAMADA_DATABASE_PASSWORD'] %>" pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: chamada production: adapter: postgresql database: chamada_production encoding: unicode password: "<%= ENV['CHAMADA_DATABASE_PASSWORD'] %>" pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: chamada test: adapter: postgresql database: chamada_test encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
J'ai déjà utilisé un YAML validator pour valider mon database.yml
, mais cela ne fonctionne toujours pas. Voici à quoi cela ressemble:
rake aborted! YAML syntax error occurred while parsing /app/config/database.yml. Please note that YAML must be consistently indented using spaces. Tabs are not allowed. Error: (<unknown>): did not find expected key while parsing a block mapping at line 7 column 3
Comment puis-je résoudre ce problème? Je n'ai aucune idée.
3 Réponses :
Utilisez des guillemets simples dans la ligne
password: <%= ENV['CHAMADA_DATABASE_PASSWORD'] %>
Vous avez utilisé des guillemets doubles, donc c'était comme:
"
CHAMADA_DATABASE_PASSWORD
"]%>"
C'est pourquoi l'erreur.
Essayez de supprimer les guillemets dans le mot de passe. Vous avez également des espaces à la fin de toutes les lignes, supprimez-les. Et vérifiez les espaces au début de toutes les lignes.
MISE À JOUR: Je n'ai pas travaillé sur Heroku depuis un moment, mais j'ai trouvé un ancien projet avec ces notes dans mon fichier database.yml:
default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch('RAILS_MAX_THREADS') { 5 } %> development: <<: *default database: chamada_development password: <%= ENV['CHAMADA_DATABASE_PASSWORD'] %> username: chamada production: <<: *default url: <%= ENV['DATABASE_URL'] %> test: <<: *default adapter: postgresql database: chamada_test
Vous devrez probablement vous assurer que vous définissez correctement les variables d'environnement. Vérifiez en exécutant heroku config --app
Vous ne devriez pas avoir besoin de ----
Si vous voulez définir la valeur par défaut, vous pouvez aussi bien l'utiliser pour ne pas vous répéter. Et aussi utiliser des guillemets simples et supprimer l'interpolation de chaîne. Vous pouvez ajouter des lignes vides entre chaque groupe.
# On Heroku and other platform providers, you may have a full connection URL # available as an environment variable. For example: # # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" # # You can use this database configuration with: # # production: # url: <%= ENV['DATABASE_URL'] %>
3 tirets, ligne vide entre les groupes et DRY ne devraient pas affecter les erreurs
@mechnicov Ce n'est vraiment pas le cas. Désolé, mais j'ai déjà essayé avec (éventuellement) toutes les mises en page possibles en changeant les guillemets doubles et simples, en supprimant et en remettant la valeur par défaut et tout ... Cela ne fonctionne tout simplement pas et je ne sais pas pourquoi ... J'ai juste essayé lacostenycoder ' solution de s et cela ne fonctionne toujours pas.
Je viens de le résoudre en recommençant étape par étape pour déployer l'application dans Heroku.
La septième ligne est «adapter: postgresql» dans la section développement, n'est-ce pas? Êtes-vous sûr qu'il y a deux espaces (et rien d'autre) avant
adaptateur
? Que ditcat -vet database.yml
?La raison peut être dans le codage. Par exemple, il peut y avoir une nomenclature. Si Windows, vous ne le verrez pas. Créez un nouveau document au format UTF-8 et recommencez.
Avez-vous pu déployer votre application sur heroku? Avez-vous une configuration DB? Voyez-vous un
DATABASE_URL
si vous exécutezheroku config --app
?@muistooshort Je crois que c'est juste 2 espaces, je ne sais pas difficile. Je n'ai rien d'étrange à exécuter
cat -vet database.yml
, juste quelques$
à la fin de chaque ligne où ils devraient être.@mechnicov Comment spécifier l'encodage lors de la création d'un fichier? Et vous voulez dire créer un autre
database.yml
?@lacostenycoder Oui, je l'étais! Mais j'ai eu une erreur après le déploiement et j'ai réalisé que je devais migrer la base de données. J'obtiens cette erreur après avoir suivi ce guide: devcenter.heroku.com/articles / Getting-started-with-rails5
Oui, je veux remplacer par un nouveau
database.yml
. Pour spécifier le codage, vous pouvez choisir Enregistrer avec UTF-8. Vous pouvez le faire par exemple dans Sublime ou un autre éditeur de texte@mechnicov Il est déjà en encodage UTF-8
Sans nomenclature, espace insécable ou autres symboles? Je recommande de créer un nouveau fichier avec une entrée manuelle.