我在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相同的错误。而且这个问题最常出现在这个问题中,这个错误时有发生。
所以也许有人遇到过这个问题并且已经找到了解决方案?或者它看起来更像是一个心理上的错误,我应该将它归档给它的维护者?
提前感谢您的帮助!
编辑:问题与精神宝石没有直接关系。这是不寻常的红宝石设置的一般问题。有关详细信息,请参阅下面接受的答案。答案 0 :(得分:1)
这是否发生在您的开发环境的舒适范围内?如果是这样,我会考虑在pry-rescue
的{{1}}块下运行它,然后在那里逛逛。
我怀疑数据存在差异。这棵树中是否有故意涉及非ASCII?你可以用这样的东西来追捕它:
Pry.rescue do … end
如下所示,rbenv安装与其他用户共享,因此请务必在任何更改时重做权限:
ruby -e 'Dir["**/*.yml"].each{|e| File.read(e)[/[^\x0-\x7f]/] and puts e}'
或者也许创建一个共享组,例如 chmod a+r -R ~/.rbenv/
,然后:
src