Gem 关于 psych 报错的一个解决过程

hastings · 2015年09月08日 · 最后由 douxiance 回复于 2015年09月09日 · 2104 次阅读
/home/wumo/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/psych.rb:370:in `parse': (<unknown>): could not find expected ':' while scanning a simple key at line 29 column 1 (Psych::SyntaxError)
    from /home/wumo/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/psych.rb:370:in `parse_stream'
    from /home/wumo/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/psych.rb:318:in `parse'
    from /home/wumo/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/psych.rb:245:in `load'

这是执行项目的一个任务时报的错

直接定位 psych.rb 的 370 行

def self.parse_stream yaml, filename = nil, &block
  if block_given?
    parser = Psych::Parser.new(Handlers::DocumentStream.new(&block))
    parser.parse yaml, filename
  else
    parser = self.parser
    parser.parse yaml, filename
    parser.handler.root
  end
end

在这个方法里添加了两行代码打印 yaml 和 filename 两个参数

  def self.parse_stream yaml, filename = nil, &block
p "yaml: #{yaml}"
p "filename:#{filename}"
    if block_given?

查看输出结果后发现是为 wumomq(我们自己写的一个 gem) 写的配置文件有问题。 最后发现出问题的配置代码是我从同事 qq 发送过来的记录中复制的代码有问题 (该问题无法通过 Sublime 看出),在 vim 中看到出问题的配置代码无法高亮让我们知道了问题的所在。重新手动重写一次配置后,问题解决。

估计是编码不同吧! 我时常碰到不同编辑器拷贝引发的各种奇奇怪怪的问题,最终结果都是因为编码差异。 很多靠肉眼是看不出来的。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号