2
votes

Erreur de syntaxe YAML lors de l'exécution de "heroku run rake db: migrate" sur mon application Rails

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.


9 commentaires

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 dit cat -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écutez heroku 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.


3 Réponses :


1
votes

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.


1 commentaires

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.



0
votes

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'] %>


2 commentaires

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.



0
votes

Je viens de le résoudre en recommençant étape par étape pour déployer l'application dans Heroku.


0 commentaires