BetterErrors / BetterErrors/better_errors
Exceptions when trying to YAML.dump, YAML.load exception when using better_errors
- Dominant language
- Ruby
- Stars
- 6.9k
- Forks
- 430
- PR merge metrics
- No merged PRs in 30d
Description
I'm working on code that uses rails attribute serializers, and exception objects are serialized.
``` ruby
[7] (pry) main: 0> begin
[7] (pry) main: 0* raise RuntimeError.new("something")
[7] (pry) main: 0* rescue => ex
[7] (pry) main: 0* exx = ex
[7] (pry) main: 0* end
#
[8] (pry) main: 0> exx
#
[9] (pry) main: 0> exx.message
"something"
[11] (pry) main: 0> dddd = YAML.dump(exx)
"--- !ruby/exception:RuntimeError\nmessage: something\n__better_errors_bindings_stack:\n- !ruby/object:Binding\n iseq: &1 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &2 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &3 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &4 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &5 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &6 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &7 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &8 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &9 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &10 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &11 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &12 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &13 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &14 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &15 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &16 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &17 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &18 !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: &19 !ruby/object:RubyVM::InstructionSequence {}\nrescue_bindings:\n- !ruby/object:Binding\n iseq: !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: !ruby/object:RubyVM::InstructionSequence {}\n- !ruby/object:Binding\n iseq: *1\n- !ruby/object:Binding\n iseq: *2\n- !ruby/object:Binding\n iseq: *3\n- !ruby/object:Binding\n iseq: *4\n- !ruby/object:Binding\n iseq: *5\n- !ruby/object:Binding\n iseq: *6\n- !ruby/object:Binding\n iseq: *7\n- !ruby/object:Binding\n iseq: *8\n- !ruby/object:Binding\n iseq: *9\n- !ruby/object:Binding\n iseq: *10\n- !ruby/object:Binding\n iseq: *11\n- !ruby/object:Binding\n iseq: *12\n- !ruby/object:Binding\n iseq: *13\n- !ruby/object:Binding\n iseq: *14\n- !ruby/object:Binding\n iseq: *15\n- !ruby/object:Binding\n iseq: *16\n- !ruby/object:Binding\n iseq: *17\n- !ruby/object:Binding\n iseq: *18\n- !ruby/object:Binding\n iseq: *19\nrescue_cause: \n"
[12] (pry) main: 0> YAML.load(dddd)
TypeError: allocator undefined for Binding
from /gems/psych-2.0.17/lib/psych/visitors/to_ruby.rb:372:in `allocate'
```
A possible workaround before serializing:
``` ruby
if ex.instance_variable_get(:@__better_errors_bindings_stack)
ex.remove_instance_variable(:@__better_errors_bindings_stack)
end
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.