ошибка рельсов, не удалось разобрать YAML - PullRequest
76 голосов
/ 13 февраля 2011

После обновления драгоценных камней я получил это:

/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

Попытка переустановить гем RedCloth, не помогло,Система хочет использовать только версию 4.2.3

Есть идеи, как это исправить?Спасибо

Ответы [ 29 ]

166 голосов
/ 24 февраля 2011

У вас где-то неверный код YAML. Я имею в виду недопустимый для Psych (новый ruby ​​YAML-парсер).

Если вы не можете (или не хотите) исправить свой код YAML, попробуйте загрузить старый синтаксический анализатор YAML (syck), добавив его в начале config/boot.rb

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

Это просто "быстрое и грязное" исправление, я знаю

49 голосов
/ 16 марта 2011

В моем обычном приложении Rails 3 также была эта проблема, потому что я использовал локализованный файл yaml для даты / времени.

Как вы можете видеть в этом коммите https://github.com/rails/rails/commit/dc94d81 это может быть легкоисправлено "путем размещения массива в отдельных строках.

         -    order: [ :year, :month, :day ]
    18  +    order:
    19  +      - :year
    20  +      - :month
    21  +      - :day
20 голосов
/ 24 марта 2012

Небольшой трюк в ответе Пола Раупаха, который при запуске из каталога находит все файлы * .yml рекурсивно во всех подкаталогах и проверяет файл.Я запустил его из моего корневого каталога 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
17 голосов
/ 02 июня 2011

Коренная причина была описана во многих местах, и я подведу ее снова.

По умолчанию есть два парсера yaml, которым вы должны пользоваться.Syck - старый, он не поддерживается и умирает, в настоящее время он используется как запасной вариант для случаев, когда нет libyaml (обычно не для систем linux).

Важно то, что у вас есть недействительныйЯмл где-то .Скорее всего, это в ваших файлах перевода (у меня были строки без кавычек с%).Просто попробуйте загрузить все свои yml-файлы с YAML.load_file в производственную коробку, и вы увидите, какой из них сломан.

13 голосов
/ 26 января 2012

Лучше всего исправить ваши файлы YAML

Вот как использовать irb , поэтому вам не нужна консоль rails, которая, вероятно, не работает:

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

вы получите хороший вывод о том, где проблема:

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>'
13 голосов
/ 12 ноября 2011

У меня была эта проблема, потому что вместо пробелов я использовал табуляцию

6 голосов
/ 03 июня 2011

Проблема с оригинальным вопросом была в RedCloth.У меня возникла та же проблема, и просто обновление до самой последней версии драгоценного камня RedCloth (в настоящее время 4.2.7) устранило проблему.

Приведенный выше совет от Honza и FlyboyArt верный, и вы должны исправить любой пользовательский YAMLу вас есть, но поскольку RedCloth так же популярен, как и большинство пользователей, которые находят этот вопрос и используют RedCloth, следует убедиться, что в их GemFile добавлена ​​следующая строка:

gem 'RedCloth', ">= 4.2.7"
6 голосов
/ 29 мая 2011

Абсолютно исправьте свой код yaml, а не просто «маскируйте» реальную проблему, заставив YAMl использовать «syck». У меня была такая же проблема, и я обнаружил искаженные операторы yml в моих файлах локализации. Если вы просто принудительно используете более старый анализатор, то вы не получите преимуществ от всей работы над новым анализатором в другом месте вашего проекта.

4 голосов
/ 29 января 2012

Для других, читающих это, я получил эту ошибку после опечатки в моей конфигурации базы данных - /config/database.yml

3 голосов
/ 14 февраля 2011

Это проблема, связанная с упаковщиком 1.0.10: подробности здесь

Попробуйте просто обновить упаковщик

...