Hello all!
I am having an odd problem when I run a stock model_security-generated
code in my rails environment. I get an infinite recirsion along the
lines of
#{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks' #{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks’
#{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks' #{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks’
#{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks' #{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks’
#{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks' #{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks’
#{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks' #{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks’
#{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks' #{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize_without_callbacks’
#{RAILS_ROOT}usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:240:in
initialize' #{RAILS_ROOT}/app/models/user.rb:38:in
initialize’
#{RAILS_ROOT}/app/controllers/user_controller.rb:193:in new' #{RAILS_ROOT}/app/controllers/user_controller.rb:193:in
login’
<<<<<<<<<<<<<<<<<<<
I traced the problem back to two lines in
activerecord-1.12.2/lib/active_record/callbacks.rb :
alias_method :initialize_without_callbacks, :initialize
alias_method :initialize, :initialize_with_callbacks
<<<<<<<<<
Those lines are executed twice. The second time around, the original
value stored in initialize_without_callbacks is overwritten by the new
value of initialize, hence infinite recursion.
Here are the call stacks for first and second calls:
First call:
Passing through alias_method
cluster:/usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:177:in
class_eval' /usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:177:in
class_eval’
/usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:177:in
append_features' /usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record.rb:56:in
include’
/usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record.rb:56
/usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record.rb:53:in
class_eval' /usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record.rb:53:in
class_eval’
/usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record.rb:53
/usr/lib/ruby/gems/1.8/gems/activesupport-1.2.2/lib/active_support/dependencies.rb:206:in
load' /usr/lib/ruby/gems/1.8/gems/activesupport-1.2.2/lib/active_support/dependencies.rb:206:in
load’
/usr/lib/ruby/gems/1.8/gems/activesupport-1.2.2/lib/active_support/dependencies.rb:38:in
require_or_load' /usr/lib/ruby/gems/1.8/gems/activesupport-1.2.2/lib/active_support/dependencies.rb:21:in
depend_on’
/usr/lib/ruby/gems/1.8/gems/activesupport-1.2.2/lib/active_support/dependencies.rb:177:in
require_dependency' /usr/lib/ruby/gems/1.8/gems/activesupport-1.2.2/lib/active_support/dependencies.rb:177:in
require_dependency’
/usr/lib/ruby/gems/1.8/gems/activesupport-1.2.2/lib/active_support/dependencies.rb:192:in
const_missing' /usr/lib/ruby/gems/1.8/gems/actionpack-1.10.2/lib/action_controller/caching.rb:517 /usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
require__’
/usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in require' /usr/lib/ruby/gems/1.8/gems/activesupport-1.2.2/lib/active_support/dependencies.rb:213:in
require’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.10.2/lib/action_controller.rb:50
/usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
require__' /usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
require’
/usr/local/lib/site_ruby/1.8/rubygems.rb:127:in activate' /usr/local/lib/site_ruby/1.8/rubygems.rb:135:in
activate’
/usr/local/lib/site_ruby/1.8/rubygems.rb:134:in each' /usr/local/lib/site_ruby/1.8/rubygems.rb:134:in
activate’
/usr/local/lib/site_ruby/1.8/rubygems.rb:135:in activate' /usr/local/lib/site_ruby/1.8/rubygems.rb:134:in
each’
/usr/local/lib/site_ruby/1.8/rubygems.rb:134:in activate' /usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:73:in
search_gempath’
/usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:71:in each' /usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:71:in
search_gempath’
/usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:4:in require' ./script/../config/boot.rb:14 script/server:2:in
require’
script/server:2
<<<<<<<<<<<<<<<<
Second call:
Passing through alias_method
cluster:/usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:177:in
class_eval' /usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:177:in
class_eval’
/usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record/callbacks.rb:177:in
append_features' /usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record.rb:56:in
include’
/usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record.rb:56
/usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record.rb:53:in
class_eval' /usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record.rb:53:in
class_eval’
/usr/lib/ruby/gems/1.8/gems/activerecord-1.12.2/lib/active_record.rb:53
/usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
require__' /usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
require’
/usr/lib/ruby/gems/1.8/gems/activesupport-1.2.2/lib/active_support/dependencies.rb:213:in
require' /usr/local/lib/site_ruby/1.8/rubygems.rb:127:in
activate’
/usr/local/lib/site_ruby/1.8/rubygems.rb:135:in activate' /usr/local/lib/site_ruby/1.8/rubygems.rb:134:in
each’
/usr/local/lib/site_ruby/1.8/rubygems.rb:134:in activate' /usr/local/lib/site_ruby/1.8/rubygems.rb:135:in
activate’
/usr/local/lib/site_ruby/1.8/rubygems.rb:134:in each' /usr/local/lib/site_ruby/1.8/rubygems.rb:134:in
activate’
/usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:73:in
search_gempath' /usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:71:in
each’
/usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:71:in
search_gempath' /usr/local/lib/site_ruby/1.8/rubygems/loadpath_manager.rb:4:in
require’
./script/…/config/boot.rb:14
script/server:2:in `require’
script/server:2
<<<<<<<<<<<<<<<<<<<<<<<<<<
At this point, my (tiny) knowledge of Ruby inner workings is obviously
insufficient. So I ask the List: can anybody explain what’s going on,
and how to fix it?
The problem only occurs in dev environment, under script/server, never
under Apache/fcgi/production.
Sincerely -
Arkadiy
P.S. If you happen to answer, please CC to my private e-mail, I am not
subscribed to the list yet…