Как мне сделать YAML в JRuby в 1.9 с Syck? - PullRequest
3 голосов
/ 08 мая 2011

Если я запустил JRuby в режиме Ruby 1.9 и скажу ему использовать Syck, а не Psych, похоже, ничего не получится.Я что-то упускаю?

Andrew-Grimms-MacBook-Pro:~ agrimm$ ruby --version
jruby 1.6.1 (ruby-1.8.7-p330) (2011-05-08 3fe11da) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_24) [darwin-x86_64-java]
Andrew-Grimms-MacBook-Pro:~ agrimm$ ruby --1.9 -S irb
jruby-head :001 > require "yaml"
 => true 
jruby-head :002 > YAML::ENGINE.yamler = "syck"
 => "syck" 
jruby-head :003 > YAML::ENGINE.yamler
 => "syck" 
jruby-head :004 > 42.to_yaml
NameError: uninitialized constant Syck::Yecht
    from org/jruby/RubyModule.java:2569:in `const_missing'
    from org/jruby/RubyClass.java:218:in `allocate'
    from /Users/agrimm/.rvm/rubies/jruby-head/lib/ruby/1.9/syck.rb:102:in `emitter'
    from /Users/agrimm/.rvm/rubies/jruby-head/lib/ruby/1.9/syck.rb:399:in `quick_emit'
    from /Users/agrimm/.rvm/rubies/jruby-head/lib/ruby/1.9/syck/rubytypes.rb:371:in `to_yaml'
    from (irb):4:in `evaluate'
    from org/jruby/RubyKernel.java:1093:in `eval'
    from org/jruby/RubyKernel.java:1418:in `loop'
    from org/jruby/RubyKernel.java:1205:in `catch'
    from org/jruby/RubyKernel.java:1205:in `catch'
    from /Users/agrimm/.rvm/rubies/jruby-head/bin/jirb:17:in `(root)'

Справочная информация : Я пытаюсь использовать Syck из-за проблем с Psych в Как десериализовать классы в Psych?

1 Ответ

1 голос
/ 28 августа 2011

Похоже, это не реализовано в JRuby. Под 1.9.2:

ruby-1.9.2-p180 :001 > require 'YAML'
 => true 
ruby-1.9.2-p180 :002 > require 'YAML/syck'
 => true 

Под JRuby 1.6.2

jruby-1.6.2 :001 > require 'YAML'
 => true 
jruby-1.6.2 :002 > require 'YAML/syck'
LoadError: no such file to load -- YAML/syck
    from org/jruby/RubyKernel.java:1038:in `require'
    from (irb):2:in `evaluate'
    from org/jruby/RubyKernel.java:1088:in `eval'
    from /Users/matt/.rvm/rubies/jruby-1.6.2/lib/ruby/1.8/irb.rb:158:in `eval_input'
    from /Users/matt/.rvm/rubies/jruby-1.6.2/lib/ruby/1.8/irb.rb:271:in `signal_status'
    from /Users/matt/.rvm/rubies/jruby-1.6.2/lib/ruby/1.8/irb.rb:155:in `eval_input'
    from org/jruby/RubyKernel.java:1419:in `loop'
    from org/jruby/RubyKernel.java:1191:in `catch'
    from /Users/matt/.rvm/rubies/jruby-1.6.2/lib/ruby/1.8/irb.rb:154:in `eval_input'
    from /Users/matt/.rvm/rubies/jruby-1.6.2/lib/ruby/1.8/irb.rb:71:in `start'
    from org/jruby/RubyKernel.java:1191:in `catch'
    from /Users/matt/.rvm/rubies/jruby-1.6.2/lib/ruby/1.8/irb.rb:70:in `start'
    from /Users/matt/.rvm/rubies/jruby-1.6.2/bin/irb:17:in `(root)'

Хотя я (пока) не эксперт по JRuby, в заметках о выпуске JRuby 1.6.0 сказано: compatibility with Ruby 1.9.2 to a very high level. Возможно, это не распространяется на syck ..?

...