76 votes

rails d'erreur, ne pouvait pas analyser YAML

Après la mise à jour des joyaux que j'ai obtenu 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 `<module:LATEX>'
    from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/redcloth/formatters/latex.rb:3:in `<top (required)>'
    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 `<top (required)>'
    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 `<top (required)>'
    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 `<top (required)>'
    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 <top (required)>'
    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 `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

ruby 1.9.2-p136 rails 3.0.3

Essayé de réinstaller gem RedCloth, n'a pas aider, système veut utiliser uniquement 4.2.3 version

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

166voto

vicvega Points 2009

Vous avez invalide YAML code quelque part. Je veux dire non valide pour les Psy (la nouvelle ruby YAML de l'analyseur).

Si vous ne pouvez (ou ne voulez pas) fixer votre YAML code, essayez de charger l'ancien YAML parser (syck), l'ajout de cette au début de l' config/boot.rb

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

C'est juste un "rapide et sale" réparer, je sais

49voto

stwienert Points 780

Mon Rails 3 App aussi eu ce problème, parce que j'ai été en utilisant un localisée Fichier yaml pour les dates/heures.

Comme vous pouvez le voir dans ce commit https://github.com/rails/rails/commit/dc94d81 cela peut être facile "fixe" en plaçant le tableau sous la forme de plusieurs lignes.

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

20voto

Glenn Rempe Points 131

Une légère tweak sur Paul Raupach de la réponse, qui, lorsqu'il est exécuté à partir d'un répertoire, trouve tout *.yml fichiers récursivement dans tous les sous-répertoires et teste le fichier. J'ai couru à partir de mon Rails de racine.

require 'yaml'

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

17voto

Honza Points 2771

La cause a été décrit sur de nombreux endroits, et je vais résumer de nouveau.

Par défaut, deux yaml analyseur Psy est le nouveau, celui que vous devez utiliser. Syck est le vieux, ce n'est pas maintenu et en train de mourir, son actuellement utilisé comme tomber en arrière quand il n'y a pas de libyaml présents (non-systèmes linux en général).

La chose importante est que vous avez quelques invalide yaml quelque part. Il est le plus probablement dans vos fichiers de traduction (j'ai eu non cotées chaînes démontrant %). Juste essayez de charger tous vos fichiers yml avec YAML.load_file sur la boîte de production et vous verrez ce qui est le cassé.

13voto

C'est meilleur pour fixer votre fichiers YAML

Voici comment l'utilisation de la cisr de sorte que vous n'avez pas besoin de la console rails qui n'est probablement pas de travail:

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

vous obtiendrez une belle sortie vous indiquant où la question est:

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 `<main>'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X