Ruby – LoadError enc / trans / single_byte

我在Ruby on Rails应用程序中使用ActiveRecord :: Store模块时遇到了一个奇怪的问题。 据我所知,这个模块在引擎盖下使用’serialize’方法,所以它只是使用ruby内置的psych gem将你的数据序列化为yaml格式。

大部分时间都可以正常工作,但有时我会收到以下消息的500错误:

LoadError (cannot load such file -- enc/trans/single_byte): ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:27:in `write' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:27:in `end_document' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:27:in `visit_Psych_Nodes_Document' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:20:in `block in visit_Psych_Nodes_Stream' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:20:in `each' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:20:in `visit_Psych_Nodes_Stream' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/nodes/node.rb:46:in `yaml' ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych.rb:243:in `dump' 

如您所见,我使用rbenv和ruby 1.9.3-p286。 我的系统是Ubuntu 11.10。 所需文件存在~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/i686-linux/enc/trans/single_byte.so 。 我遇到了与ruby 1.9.3-p194相同的错误。 而且这个错误最常发生在这个问题上。

所以也许有人遇到过这个问题并且已经找到了解决方案? 或者它看起来更像是一个心理上的错误,我应该将它归档给它的维护者?

在此先感谢您的帮助!

编辑:问题与精神gem没有直接关系。 这是不寻常的ruby设置的一般问题。 有关详情,请参阅下面接受的答案。

这是否发生在您的开发环境的舒适范围内? 如果是这样,我会考虑在Pry.rescue do … end pry-rescuePry.rescue do … end下运行它Pry.rescue do … end块并在那里戳。

我怀疑数据存在差异。 这棵树中是否有故意涉及非ASCII? 你可以用这样的东西追捕它:

 ruby -e 'Dir["**/*.yml"].each{|e| File.read(e)[/[^\x0-\x7f]/] and puts e}' 

如下所示,rbenv安装与其他用户共享,因此请务必在任何更改时重做权限:

  chmod a+r -R ~/.rbenv/ 

或者也许创建一个共享组,例如src ,然后:

  chgrp src ~/.rbenv && chmod g+r -R ~/.rbenv