2012-11-07 61 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