2012-11-07 34 views
6

我在Ruby on Rails应用程序中使用ActiveRecord :: Store模块时遇到了一个奇怪的问题。据我所知,这个模块使用'serialize'方法,所以它只是使用ruby内置的心灵宝石将数据序列化为yaml格式。Ruby - LoadError enc/trans/single_byte

它的工作原理确定的大部分时间,但有时我得到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相同的错误。这个问题中最奇怪的部分是这个错误不时发生。

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

在此先感谢您的帮助!

编辑:问题是不是直接关系到心理宝石。这是不寻常的红宝石设置的一般问题。详情请参阅下面的接受答案。

回答

1

这是发生在您的开发环境的舒适范围内吗?如果是这样的话,我会考虑在pry-rescuePry.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 
+0

rking,谢谢你的建议!你指出我正确的方向。 已解决。问题很简单:我在源代码中使用非ASCII字符,所以我必须在ruby解释器中打开unicode模式(通过魔法注释)。但由于不寻常的设置(其他用户访问ruby的主目录已关闭),ruby无法使用其内部代码对代码进行转码。 解决方案:打开dir,其中安装了ruby,至少安装了启动ruby解释器的用户。 rking,你能否用这个信息填写你的答案,以便我可以接受它作为最终解决方案?我希望它能帮助别人。 – rgt600