rails error, couldn't parse YAML

2019-01-02 14:32发布

After updating the gems I've got this:

/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

Tried to reinstall gem RedCloth, didn't help, system wants to use only 4.2.3 version

Any idea how to fix it? Thanks

29条回答
十年一品温如言
2楼-- · 2019-01-02 15:17

The root cause was described on many places and I will summarize it again.

There are two default yaml parser Psych is the new one, the one you should be using. Syck is the old one, its not maintained and dying, its currently used as fall back for when there is no libyaml present (non-linux systems usually).

The important thing is you have some invalid yaml somewhere. It is most probably in your translation files (I had unquoted strings strating with %). Just try loading all your yml files with YAML.load_file on the production box and you will see which one is the broken one.

查看更多
心情的温度
3楼-- · 2019-01-02 15:19

If you're like me and facing a project (inherited) with hundreds of fixtures a few lines of Ruby can save you hours:

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

Just put it in your Rails root and run it, trash it when you're done.

查看更多
倾城一夜雪
4楼-- · 2019-01-02 15:21

The problem with the original question was in RedCloth. I was experiencing the same issue and simply updating to the most recent version of the RedCloth gem (Currently 4.2.7) fixed the issue.

The above advice from Honza and FlyboyArt is sound and you should fix any custom YAML you have, but with RedCloth being as popular as it is, most users finding this question who also use RedCloth should make sure their GemFile has this line added:

gem 'RedCloth', ">= 4.2.7"
查看更多
忆尘夕之涩
5楼-- · 2019-01-02 15:22

What fixed it in my cause was indeed malformed YAML translation file in:

config/locales/bg.yml

Corrected the YAML mistake and it was all fine. :-)

查看更多
萌妹纸的霸气范
6楼-- · 2019-01-02 15:23

For others reading this, I got this error after making a typo in my database configuration - /config/database.yml

查看更多
还给你的自由
7楼-- · 2019-01-02 15:23

I had the same issue with ruby 1.9.2-p180 , going to 1.9.2-p290 solved this for me

查看更多
登录 后发表回答