Tag: psych

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设置的一般问题。 […]

心理医生说«在中级正在建立一个AST ……»但是,到底是怎么回事?

我使用Sych做了这个旧代码: yaml_as “tag:yaml.org,2002:#{self}” def to_yaml(opts = {}) YAML::quick_emit(self, opts) do |out| out.map(taguri, to_yaml_style) do |map| map.add(‘name’, name) map.add(‘address’, full_address.upcase) if full_address? end end end 输出类似的东西: — !Contact name: SMOKE OIL address: |- SMOKE OIL 1 RUE DE LA PAIX 75002 PARIS FRANCE 现在,我正在升级旧代码,转到Psych所以,我阅读了doc并做了: yaml_as “tag:yaml.org,2002:#{self}” def encode_with(coder) coder[‘name’] = name coder[‘address’] = full_address.upcase if full_address? […]

如何在Psych中反序列化类?

如何在Psych中反序列化以返回现有对象,例如类对象? 要做类的序列化,我可以做 require “psych” class Class yaml_tag ‘class’ def encode_with coder coder.represent_scalar ‘class’, name end end yaml_string = Psych.dump(String) # => “— ! String\n…\n” 但如果我尝试使用Psych.load ,我会得到一个匿名类,而不是String类。 正常的反序列化方法是Object#init_with(coder) ,但这只会改变现有匿名类的状态,而我想要String类。 Psych::Visitors::ToRuby#visit_Psych_Nodes_Scalar(o)有一些情况,而不是用init_with修改现有对象,它们确保首先创建正确的对象(例如,调用Complex(o.value)来反序列化一个复合体数字),但我不认为我应该monkeypatching该方法。 我注定要使用低水平或中等水平的发射,或者我错过了什么? 背景 我将描述该项目,它为什么需要类,以及它为什么需要(反)序列化。 项目 Small Eigen Collider旨在为Ruby创建随机任务。 最初的目的是看看Ruby的不同实现(例如,Rubinius和JRuby)在给定相同的随机任务时是否返回相同的结果,但我发现它对检测Rubinius和YARV的段错误也很有用。 每项任务由以下内容组成: receiver.send(method_name, *parameters, &block) 其中receiver是随机选择的对象, method_name是随机选择的方法的名称, *parameters是随机选择的对象的数组。 &block不是很随机 – 它基本上等同于{|o| o.inspect} {|o| o.inspect} 。 例如,如果接收器是“a”,method_name是:casecmp,参数是[“b”],那么你将调用 “a”.send(:casecmp, “b”) {|x| […]

Rails 3 – ‘无法解析Yaml’

我不知道我做错了什么。 我尝试运行’rails c’,但它只是给了我一个错误。 它在10分钟前工作。 :\ C:/Ruby192/lib/ruby/1.9.1/psych.rb:148:in `parse’: couldn’t parse YAML at line 2 column 12 (Psych::SyntaxError) from C:/Ruby192/lib/ruby/1.9.1/psych.rb:148:in `parse_stream’ from C:/Ruby192/lib/ruby/1.9.1/psych.rb:119:in `parse’ from C:/Ruby192/lib/ruby/1.9.1/psych.rb:106:in `load’ from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/applic ation/configuration.rb:88:in `database_configuration’ from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.0.7/lib/active_r ecord/railtie.rb:58:in `block (2 levels) in ‘ from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.7/lib/active_ support/lazy_load_hooks.rb:36:in `instance_eval’ from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.7/lib/active_ support/lazy_load_hooks.rb:36:in `execute_hook’ from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.7/lib/active_ support/lazy_load_hooks.rb:43:in `block in run_load_hooks’ from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.7/lib/active_ support/lazy_load_hooks.rb:42:in `each’ […]

为什么psych yaml解释器会在80个字符左右添加换行符?

自从ruby1.9.3以来,Psych是默认的yaml引擎 为什么,为什么心理在其输出中添加换行符? 请查看以下示例。 ruby -v # => ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux] require ‘yaml’ “this absolutely normal sentence is more than eighty characters long because it IS”.to_yaml # => “— this absolutely normal sentence is more than eighty characters long because it\n IS\n…\n” YAML::ENGINE.yamler = ‘syck’ “this absolutely normal sentence is more than eighty […]

修复“ruby安装缺少心理”错误?

我正在运行Ruby ruby​​ 1.9.3p125并且我不断收到此错误,这使我无法在Rails中进行任何类型的开发。 看来你的ruby安装缺少心理(对于YAML输出)。 要消除此警告,请安装libyaml并重新安装ruby。 我用谷歌搜索过,看似似乎一切,但似乎没有任何工作。 我真的很想开始一些新的项目,但似乎无法绕过这个障碍。 任何帮助是极大的赞赏!

干净安装OSX 10.9.1在尝试安装gem时返回“undefined method`path2class’”

我刚用Homebrew和RVM安装了一个干净的Mavericks安装。 brew doctor和rvm requirements返回“all good”,但是,当我在我的项目中运行bundle install ,我的大多数gem都安装得很好,但是少数几个安装失败时出现同样的错误: Bundler::GemspecError: Could not read gem at /Users/NK/.rvm/gems/ruby-2.0.0-p353/cache/eventmachine-1.0.3.gem. It may be corrupted. An error occurred while installing eventmachine (1.0.3), and Bundler cannot continue. Make sure that `gem install eventmachine -v ‘1.0.3’` succeeds before bundling. 然后,如果我再次尝试使用gem install eventmachine -v ‘1.0.3’我会得到: ERROR: Error installing eventmachine: invalid gem: package is corrupt, exception […]

如何在Ruby扩展别名中发出YAML

我正在寻找一种方法来发出YAML文件,避免使用别名(主要是为了简化人类的可读性)。 我认为扩展Psych::Visitors::Emitter或Psych::Visitors::Visitor是Psych::Visitors::Visitor的方法,但我实际上无法找到Ruby决定是否完全转储锚点,或者使用别名引用它。 我甚至不介意锚是否被重复使用(使用&……引用),我只需要将别名扩展到完整结构。 我知道过去曾问过类似的问题,但是: 没有别名的Ruby YAML写入仍未得到答复 是否可以使用Ruby或Python禁用锚点/引用来发出有效的YAML? 给出了Python的答案,但没有给Ruby

YAML :: load引发未定义的类/模块错误

我正在我的rails应用程序中实现类似于纸张跟踪的function。 为了做到这一点,我在YAML中序列化对象。 我有item_at_version方法,它基本上是YAML::load(cached_object) – 这很好用,但是,我不知道为什么,有时它会返回undefined class/module _class name_ 。 它适用于像Event,Conversation,Note等模型,但没有任何理由,它似乎为像Dataset,Comment,Student这样的模型抛出了这个错误(我试图找到任何模式,没有任何运气) 。 我使用rails 3.2.8,ruby 1.9.3p327,psych作为YAML Engine(Psych :: Version返回1.3.4)。 PS。 当我在该文件的顶部添加require’model_name’时,它就像一个魅力。 任何想法我应该改变/添加什么来使这个工作? 编辑:我可以分享的代码不多: def item_at_version YAML::load(cached_object) end 但也许回溯会很有趣: ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:312:in `path2class’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:312:in `resolve_class’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:219:in `visit_Psych_Nodes_Mapping’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:20:in `accept’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:238:in `visit_Psych_Nodes_Document’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:20:in `accept’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/nodes/node.rb:35:in `to_ruby’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych.rb:128:in `load’ app/models/history_version.rb:7:in `item_at_version’ app/controllers/history_controller.rb:8:in `show’ actionpack […]

Psych to_yaml选项的文档?

Ruby 1.9.3默认使用Psych for YAML。 虽然它的ruby-doc文档 完全缺乏 ,但我能够找到一个外部文档,暗示支持indentation选项。 测试证实了这一点: irb(main):001:0> RUBY_VERSION #=> “1.9.3” irb(main):002:0> require ‘yaml’ #=> true irb(main):003:0> [[[1]]].to_yaml #=> “—\n- – – 1\n” irb(main):009:0> [[[1]]].to_yaml indentation:9 #=> “—\n- – – 1\n” 可能有更多选项支持。 具体来说,我想知道如何更改换行宽度或完全禁用它。 有哪些选择?