2016-05-03 19 views
1

Ich bin damit beschäftigt, eine Datenmigration zu schreiben, die uns erlauben wird, yamlers von Syck zu Psych zu ändern. Dazu muss ich einige Spalten in unserer Datenbank migrieren. Ich habe den folgenden seltsamen Rand Fall getroffenSyck.dump leerer Hash löst IO-Ausnahme aus

(rdb:1) Syck.dump({}) 
    *** NoMethodError Exception: undefined method `[]' for #<StringIO:0x007f9142eb7438> 
/Users/donovanthomson/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/psych/deprecated.rb:21:in `quick_emit' 
/Users/donovanthomson/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/syck/rubytypes.rb:16:in `to_yaml' 
/Users/donovanthomson/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/syck/rubytypes.rb:451:in `to_yaml' 
/Users/donovanthomson/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/syck.rb:119:in `dump' 

So scheinbar leer Hashes können nicht mit Syck abgeladen werden?

+0

Das ist seltsam. Können Sie Ihre Frage so bearbeiten, dass sie den gesamten Stack-Trace enthält? –

+0

@ Jordan, irgendwelche Vorschläge würden sehr geschätzt werden! –

+0

Haben Sie Psych und Syck gleichzeitig geladen? Ich denke, das könnte dein Problem sein. Sieht so aus, als ob 'syck/rubytypes.rb'' YAML.quick_emit' (statt 'Syck.quick_emit') ruft, was von Psych statt von Syck gehandhabt wird. Ich bin momentan zwar mobil, kann es aber im Moment nicht weiter eingrenzen. –

Antwort

0

Es stellte sich heraus, dass ich etwas ziemlich Dummes tat, hatte ich die Syck-Abhängigkeit lokal entfernt, bevor ich die Migration ausgeführt hatte.