RuntimeError: can't modify frozen Hash

Mam dwa observery dla tej samej akcji after_destroy, dla tego samego obiektu folder, chcialbym zachowac to osobno ze wzledu na przejrzystosc kodu, ale nie wiem czy jest to dopuszczalne.
Co ciekawe na localu oba observery odpalają i akcje wykonuja sie (zadania delegowane do resque), na produkcji juz nie.

Natomiast w specu dla destroy przy próbie usuniecia obiektu dostaje:

RuntimeError: can’t modify frozen Hash

Część backtrace:

[quote]# /Users/artur/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/persistence.rb:239:in update' # /Users/artur/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/persistence.rb:239:inblock in reload’
# /Users/artur/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/identity_map.rb:72:in without' # /Users/artur/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/persistence.rb:237:inreload’
# /Users/artur/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/attribute_methods/dirty.rb:44:in reload' # /Users/artur/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/autosave_association.rb:214:inreload’
# ./spec/lib/dropbox_bridge_spec.rb:452:in block (3 levels) in <top (required)>' # /Users/artur/.rvm/gems/ruby-1.9.3-p0/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:48:ininstance_eval’
# /Users/artur/.rvm/gems/ruby-1.9.3-p0/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:48:in block in run' # /Users/artur/.rvm/gems/ruby-1.9.3-p0/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:107:inwith_around_hooks’
# /Users/artur/.rvm/gems/ruby-1.9.3-p0/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:45:in `run’[/quote]
chyba ze wrzuce @folder.destroy w blok lambda, wtedy test przechodzi. Tak przy okazji co dokladnie robi lambda w specach i czy nalezy ja stosowac ?

Twoje pytanie to WTF dnia, ale postaram się pomóc. Daj jakiś kod bo nie rozumiem nawet czy mówisz o modelu czy kontrolerze (podejrzewam że o modelu).
Druga częśc pytania o lambdach w specach – również musisz dać jakiś kod bo nie dojdziemy nawet o co pytasz.

[code=ruby]class DropboxSyncObserver < ActiveRecord::Observer
observe :folder

def after_destroy(folder)
tu kolejkowanie zadania dla resque
end
end

class FolderObserver < ActiveRecord::Observer

def after_destroy(folder)
   tu takze kolejkowanie innego zadania dla resque
end

end[/code]

it "should delete a folder" do @folder.destroy lambda do File.directory?("somepath/here").should eql false end @folder.reload.some_attr.should eql nil end
po przeniesieniu @folder.destroy do lambdy test przechodzi. wydaje mi sie ze lambda sprawia ze rspec poczeka az kod w lambda sie wykona i dopiero idzie dalej ? mam racje ?

z tego co wyśledziłem jak narazie, to metoda reload na obiekcie powoduje ze rspec wypluwa błąd can’t modify frozen Hash.
folder.frozen?.inspect zwraca true. Dodatkowo wszelkie testy zamkniete w lambda zawsze przechodzą, więc wrzucenie ich tam to nie jest rozwiązanie.

okazało sie że powodem błedu z frozen Hash było to że wywoływałem reload na obiekcie który był oznaczony jako deleted