erreur de rails, impossible d’parsingr YAML

Après avoir mis à jour les gemmes, j’ai ceci:

/home/megas/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/psych.rb:148:in `parse': couldn't parse YAML at line 182 column 9 (Psych::SyntaxError) from /home/megas/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/psych.rb:148:in `parse_stream' from /home/megas/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/psych.rb:119:in `parse' from /home/megas/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/psych.rb:106:in `load' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/redcloth/formatters/latex.rb:6:in `' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/redcloth/formatters/latex.rb:3:in `' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/redcloth.rb:21:in `require' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/redcloth.rb:21:in `' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/case_sensitive_require/RedCloth.rb:6:in `require' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/case_sensitive_require/RedCloth.rb:6:in `' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `require' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `block (2 levels) in require' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `each' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `block in require' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `each' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `require' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler.rb:120:in `require' from /home/megas/Work/railscasts/config/application.rb:10:in `' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/commands.rb:28:in `block in ' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap' from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/commands.rb:27:in `' from script/rails:6:in `require' from script/rails:6:in `' 

ruby-1.9.2-p136 rails 3.0.3

Essayé de réinstaller gem RedCloth, n’a pas aidé, le système veut utiliser uniquement la version 4.2.3

Toute idée de comment résoudre ce problème? Merci

Vous avez un code YAML non valide quelque part. Je veux dire invalide pour Psych (le nouvel parsingur YAML Ruby).

Si vous ne pouvez pas (ou ne voulez pas) corriger votre code YAML, essayez de charger l’ancien parsingur YAML (syck), en l’ajoutant au début de config/boot.rb

 require 'yaml' YAML::ENGINE.yamler = 'syck' 

C’est juste une solution “rapide et sale”, je sais

Mon application Rails 3 standard avait également ce problème, car j’utilisais un fichier yaml localisé pour Date / Times.

Comme vous pouvez le voir dans cet article https://github.com/rails/rails/commit/dc94d81, cela peut être facilement “corrigé” en plaçant le tableau dans des lignes séparées.

  - order: [ :year, :month, :day ] 18 + order: 19 + - :year 20 + - :month 21 + - :day 

Une légère modification de la réponse de Paul Raupach qui, lorsqu’il est exécuté depuis un répertoire, trouve tous les fichiers * .yml de manière récursive dans tous les sous-répertoires et teste le fichier. Je l’ai lancé depuis mon répertoire racine Rails.

 require 'yaml' d = Dir["./**/*.yml"] d.each do |file| begin puts "checking : #{file}" f = YAML.load_file(file) rescue StandardError puts "failed to read #{file}: #{$!}" end end 

La cause première a été décrite à plusieurs endroits et je vais la résumer à nouveau.

Il y a deux yaml parser par défaut Psych est le nouveau, celui que vous devriez utiliser. Syck est l’ancien, il n’est ni maintenu ni en train de mourir, il est actuellement utilisé comme solution de rechange lorsqu’il n’y a pas de libyaml présent (systèmes non Linux en général).

L’important est que vous ayez quelque igname invalide quelque part . C’est très probablement dans vos fichiers de traduction (j’avais des chaînes non cotées avec strate%). Essayez simplement de charger tous vos fichiers yml avec YAML.load_file dans la boîte de production et vous verrez lequel est le fichier cassé.

J’ai eu ce problème parce que j’avais utilisé un onglet au lieu d’espaces

Il est préférable de réparer vos fichiers YAML

Voici comment utiliser irb pour ne pas avoir besoin de la console de rails qui ne fonctionne probablement pas:

 require 'yaml' YAML::ENGINE.yamler = 'psych' YAML.load_file('config/locales/xxx.en.yml') 

vous obtiendrez une bonne sortie vous indiquant où est le problème:

 Psych::SyntaxError: couldn't parse YAML at line 25 column 17 from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:148:in `parse' from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:148:in `parse_stream' from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:119:in `parse' from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:106:in `load' from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:205:in `load_file' from (irb):10 from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `
'

Corrigez complètement votre code yaml, ne vous contentez pas de “masquer” le vrai problème en forçant YAMl à utiliser “syck”. J’ai eu le même problème et trouvé des instructions yml malformées dans mes fichiers de localisation. Si vous forcez simplement l’utilisation de l’ancien parsingur, vous n’obtiendrez pas les avantages de tout le travail sur le nouvel parsingur ailleurs dans votre projet.

Le problème avec la question initiale était dans RedCloth. Je rencontrais le même problème et la simple mise à jour vers la version la plus récente du joyau RedCloth (actuellement 4.2.7) a résolu le problème.

Les conseils ci-dessus de Honza et FlyboyArt sont valables et vous devriez corriger tout YAML personnalisé que vous avez, mais avec RedCloth aussi populaire que cela, la plupart des utilisateurs trouvant cette question qui utilisent également RedCloth devraient s’assurer que leur ligne GemFile est ajoutée:

 gem 'RedCloth', ">= 4.2.7" 

Pour les autres /config/database.yml , j’ai eu cette erreur après avoir fait une faute de frappe dans ma configuration de firebase database – /config/database.yml

C’est un problème de bundler 1.0.10: détails ici

Essayez juste de réduire le paquet

Ce qui l’a corrigé dans ma cause était en effet un fichier de traduction YAML mal formé dans:

 config/locales/bg.yml 

Corrigé l’erreur de YAML et tout allait bien. 🙂

Pour ceux qui poursuivent ce problème, je viens de trouver que mon database.yml provoquait cette erreur car il n’y avait pas d’espace entre le mot de passe: mot-clé et le mot de passe. Une erreur presque invisible, et avec un database.yml qui avait fonctionné sans erreurs sur une version antérieure de rails.

J’ai eu ce problème. Mon problème était que j’avais un onglet supplémentaire dans mon fichier database.yml.

Je suis tombé sur ceci car j’utilisais la bibliothèque r18n dans une application Sinatra que je construisais et dans mon fichier de traduction, j’avais les éléments suivants:

 day: !!pl 0: 0 days 1: 1 day n: %1 days 

qui fonctionnait très bien dans un projet plus ancien sous Ruby 1.8.7 , mais qui échouait sous Ruby 1.9.3 .

Une réponse de @SB m’a donné la clé dont j’avais besoin pour résoudre mon problème. Le nouveau YAML était en train de reculer au %1 . Une recherche rapide et une expérience avec irb et je sais maintenant que la nouvelle version de l’parsingur YAML nécessite que vous placiez des guillemets autour des chaînes qui commencent par %1 , donc j’ai juste changé ma traduction pour être

 day: !!pl 0: 0 days 1: 1 day n: "%1 days" 

et voila – un message d’erreur méchant a disparu.

Pour mon cas, ce n’est pas un problème de Bundle: (supposons que Ruby 1.9)

  • Ruby, par défaut, utilise ‘psych’ (bibliothèque yaml plus récente et liée à la bibliothèque C: libyaml) si libyaml est présent
  • Sinon, Ruby utilise «syck» (ancien et non maintenu)
  • YAML :: ENGINE.yamler = ‘syck’ va donc obliger Ruby à utiliser ‘syck’ sur une machine où ‘psych’ est également installé

Plus d’infos ici: require “yaml” n’utilise pas psych par défaut

Je parviens à résoudre ce problème en installant gem psych dans le groupe: développement et: test.

 gem 'psych' 

J’ai eu le même problème avec ruby ​​1.9.2-p180, allant à 1.9.2-p290 résolu ce problème pour moi

Bien que la réponse donnée par @Vicvega puisse ou non fonctionner (elle n’a pas été testée), elle va à l’encontre du principe commun de Rails et Ruby «Convention over configuration» et devrait être traitée avec soin (et même davantage dans un travail collaboratif) bien que la “configuration” dans ce cas ne soit pas géniale

donc mon vote va (si je pouvais voter) pour ceux qui ont proposé d’éliminer les erreurs de syntaxe dans les fichiers YAML.

maintenant … pour résoudre l’erreur, pour moi c’était une erreur nouvelle, je n’avais pas le fichier de parameters régionaux que j’avais défini par défaut dans Config/application.rb dans mon répertoire Config/locales

codage heureux

Besoin de vérifier les fichiers .yml pour l’erreur, j’ai trouvé un problème dans mon database.yml

J’ai eu un problème similaire avec un fichier de traduction YAML mal formé. Il a utilisé une variable avant de la définir. Le suivant était faux:

 ... messages: ... < <: *errors_messages ... messages: &errors_messages ... 

Il a fallu changer pour:

 ... messages: &errors_messages ... messages: ... < <: *errors_messages ... 

Ensuite, il a recommencé à fonctionner.

J’ai eu cette erreur en essayant de me connecter à une firebase database distante avec le mot 'p@ssword' passe 'p@ssword' et 'p@ssword' compris que psych 'p@ssword' pas le symbole '@' . Modification du mot de passe de la firebase database et résolution du problème.

Dans mon cas, il y avait 2 problèmes.

  1. Comme mentionné par @stwienert, la représentation du tableau était un problème.
  2. Une autre chose était que si une chaîne commençait par% {var}, je recevais une exception Parse. J’ai dû modifier les chaînes en conséquence pour éviter de commencer par% {var}

Par exemple si la chaîne était

%{user_name} welcome to %{application_name} – Cela a généré une erreur

Pour y remédier je devais le changer pour

 Hi, %{user_name} welcome to %{application_name} 

J’espère que cela aide quelqu’un.

Cordialement,

Shardul.

Eh bien, juste au cas où cela aiderait …
Ce que j’ai fait:
– Tout sélectionner et copier de https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/es.yml dans un nouveau es.yml avec notepad ++
– essayé de regarder ce nouveau fichier avec l’éditeur de texte netBeans IDE, j’ai eu un avertissement sur le chargement sécurisé avec utf8 (ne peut pas rappeler le texte exact). D’où ne pas l’ouvrir avec cet éditeur de texte.
– commuté le local par configuration / application.rb i18n
– Quand j’ai chargé une page irb, j’ai eu “impossible d’parsingr YAML à la ligne 0 colonne 0” en référence à Psych.
– Je suis allé à IRB et j’ai chargé le fichier avec syck, ça allait; Passé au psych et eu la même erreur.

Comment je l’ai résolu:
– est retourné pour copier le contenu de https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/es.yml mais cette fois je l’ai collé dans un nouveau fichier créé avec l’éditeur netBeans.
– redémarré webRick.
– problème résolu.
Meilleures salutations,
Victor

Supprimez les bases de database.rb inutilisées de database.rb . Si vous utilisez MySQL et qu’il n’y a pas de PostgreSQL, supprimez le code de la databases.yml de databases.yml PG de databases.yml .

Pshych parse est sucer à la base. Je ne suis pas sûr que ce soit une solution élégante, mais je parviens à résoudre ce problème en le désinstallant.

 gem uninstall psych 

J’ai eu un problème vraiment très étrange parce que j’avais des espaces après. Par exemple:

 title: "NASA" 

N’a pas fonctionné, mais

 title:"NASA" 

Fait.

Si vous êtes comme moi et que vous êtes confronté à un projet (hérité) avec des centaines d’appareils, quelques lignes de Ruby peuvent vous faire économiser des heures:

 require 'yaml' d = Dir.new('test/fixtures/') d.each do |file| begin f = YAML.load_file('test/fixtures/' + file) rescue StandardError puts "failed to read test/fixtures/#{file}: #{$!}" end end 

Il suffit de le mettre dans votre racine Rails et de l’exécuter, de le jeter à la fin.

Pour les autres utilisateurs, j’ai trouvé le problème dans rerun.txt qui était appelé par config/cucumber.yml dans une application Rails. rerun.txt été configuré pour stocker le dernier test d’échec du concombre et j’avais en quelque sorte saisi des caractères étranges pour un test de concombre dans la console.

C’était difficile à trouver. J’aurais aimé voir la réponse de Glenn Rempe il y a quelque temps.

L’une des causes possibles est que les valeurs de mappage ne sont pas autorisées dans ce contexte à la ligne …

Voici un exemple YAML incorrect (user: ne doit contenir aucune valeur car il contient des éléments children some_key et some_other_key)

 customer: Customer user: User some_key: value some_other_key: value 2 

Trouver un tel problème, surtout si vous avez un énorme fichier YAML, n’est pas une tâche banale.

J’ai créé une expression rationnelle assez simple pour détecter de telles choses. Je l’ai vérifié dans RubyMine

 ^(\s+)['"\w]+:\s?['"\w]+.*\n\1\s\s 

Faites attention! Cela ne fonctionne pas correctement avec des caractères spéciaux comme å ø æ, etc.

Faites-moi savoir dans les commentaires si cela a fonctionné pour vous 🙂