6

在我的 Ruby on Rails 应用程序中使用 ActiveRecord::Store 模块时遇到了一个奇怪的问题。据我了解,该模块在后台使用“序列化”方法,因此它只是使用 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 时遇到了同样的错误。而这个问题最奇怪的部分是这个错误不时发生。

那么也许有人也遇到了这个问题并且已经找到了解决方案?还是它看起来更像是心理中的一个错误,我应该将它提交给它的维护者?

提前感谢您的帮助!

编辑:问题与心理宝石没有直接关系。这是不寻常的红宝石设置的一般问题。有关详细信息,请参阅下面接受的答案。

4

1 回答 1

1

这是否发生在您的开发环境的舒适范围内?如果是这样,我会考虑在pry-rescue'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
于 2012-11-15T15:13:03.957 回答