# Ruby 1.8.4 rc breaks alias\_method/rails in bad ways

**URL:** <https://www.ruby-forum.com/t/ruby-1-8-4-rc-breaks-alias-method-rails-in-bad-ways/97070>\
**Category:** Rails\
**Created:** [December 9, 2005, 9:08pm UTC](https://www.ruby-forum.com/t/ruby-1-8-4-rc-breaks-alias-method-rails-in-bad-ways/97070 "2005-12-09T21:08:27Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![ara.t.howard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@ara.t.howard](https://www.ruby-forum.com/u/ara.t.howard)\
**Post date:** [December 9, 2005, 9:08pm UTC](https://www.ruby-forum.com/t/ruby-1-8-4-rc-breaks-alias-method-rails-in-bad-ways/97070/1 "2005-12-09T21:08:27Z")

</div>

i’m on a box with latest (today’s) ruby and rails. i started seeing  
bizzare  
errors with infinite stack recursion for a simple

ModelName.find :all

the code is kinda deep, but you can see how the problem occurs by  
looking at

activerecord-1.13.1/lib/active\_record/callbacks.rb +215

there we see

object = instantiate\_without\_callbacks(record)

scanning up a bit we see

```
 def self.append_features(base) #:nodoc:
   super

   base.extend(ClassMethods)
   base.class_eval do
     class << self
       include Observable
       alias_method :instantiate_without_callbacks, :instantiate
       alias_method :instantiate, :instantiate_with_callbacks
     end

```

the first alias method is supposed to do

instantiate\_without\_callbacks -\> ActiveRecord::Base::instaniate

the second

instantiate -\> the yet to be defined  
ActiveRecord::Callbacks::instantiate\_with\_callbacks

which takes you back to line 215, shows:

```
 module ClassMethods #:nodoc:
   def instantiate_with_callbacks(record)

```

Â·Â·Â· ect = instantiate\_without\_callbacks(record)

what is supposed to happen here is that any call to  
ActiveRecord::Base::instantiate first calls instantiate\_with\_callbacks,  
which  
calls instantiate\_without\_callbacks, which calls the, supposedly,  
**original**  
ActiveRecord::Base::instantiate.

what **actually** happens in this:

> > Company.find :all

- 

## /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/base.rb:431:in `find\_by\_sql’

## /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/base.rb:431:in `find\_by\_sql’

/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/base.rb:395:in  
`find’

- (irb):1:in `irb\_binding’

- /usr/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb\_binding’

- /usr/local/lib/ruby/1.8/irb/workspace.rb:52

- 

## /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/callbacks.rb:222:in `instantiate’

## /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/base.rb:431:in `find\_by\_sql’

## /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/base.rb:431:in `find\_by\_sql’

/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/base.rb:395:in  
`find’

- (irb):1:in `irb\_binding’

- /usr/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb\_binding’

- /usr/local/lib/ruby/1.8/irb/workspace.rb:52

- 

## /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/callbacks.rb:222:in `instantiate’

## /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/base.rb:431:in `find\_by\_sql’

## /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/base.rb:431:in `find\_by\_sql’

/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active\_record/base.rb:395:in  
`find’

- (irb):1:in `irb\_binding’
- /usr/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb\_binding’
- /usr/local/lib/ruby/1.8/irb/workspace.rb:52

and so on and so forth. eg. - infinite recursion.

it seems the original instanciate is lost in this whole method shuffling  
approach.

this code works in 1.8.2 and 1.8.3. unless the bevhaiour of  
alias\_methods has  
changed - hard to beleive - this seems to be a bad bug. i’ve tried to  
distill  
this to a simple example with no luck. so i’m afaid there is more to  
it that  
the above. all you need do to reproduce is setup a rails dir, create a  
model,  
and run YourModel.find :all.

system info

root:rr# uname -srm  
FreeBSD 5.3-RELEASE i386

root:rr# ruby -v  
ruby 1.8.4 (2005-12-01) [i386-freebsd5.3]

root:rr# rails -v  
Rails 0.14.4

hopefully i’ve not overlooked something obvious here - our water pipes  
froze  
today so i haven’t been able to drink coffee.

thoughts?

## -a

# =============================================================================== | ara [dot] t [dot] howard [at] noaa [dot] gov | all happiness comes from the desire for others to be happy. all misery | comes from the desire for oneself to be happy. | – bodhicaryavatara

---

<div class="post-metadata">

**Author:** ![ara.t.howard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@ara.t.howard](https://www.ruby-forum.com/u/ara.t.howard)\
**Post date:** [December 9, 2005, 9:37pm UTC](https://www.ruby-forum.com/t/ruby-1-8-4-rc-breaks-alias-method-rails-in-bad-ways/97070/2 "2005-12-09T21:37:00Z")

</div>

On Sat, 10 Dec 2005, Ara.T.Howard wrote:

> 

quick follow up. tweaking activerecord/base.rb to

def \_\_instantiate(record)

and activerecord/callbacks.rb to

def instantiate\_without\_callbacks(record)Â·  
\_\_instantiate(record)  
end  
def instantiate(record)  
instantiate\_with\_callbacks(record)  
end  
def instantiate\_with\_callbacks(record)  
object = instantiate\_without\_callbacks(record)

while deleting the aliases works - so the issue is defintely in  
alias\_methods  
or rails’ use of it.

## -a

# =============================================================================== | ara [dot] t [dot] howard [at] noaa [dot] gov | all happiness comes from the desire for others to be happy. all misery | comes from the desire for oneself to be happy. | – bodhicaryavatara

---

<div class="post-metadata">

**Author:** ![ara.t.howard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@ara.t.howard](https://www.ruby-forum.com/u/ara.t.howard)\
**Post date:** [December 11, 2005, 4:36pm UTC](https://www.ruby-forum.com/t/ruby-1-8-4-rc-breaks-alias-method-rails-in-bad-ways/97070/3 "2005-12-11T16:36:10Z")

</div>

I just got done compiling 1.8.4 preview 2 (not the daily) on cygwin,  
windows xp sp2, edge rails 3275.  
no errors, no warnings during the compile of ruby and  
all ext libs/programs.

i ran your ‘find(:all)’ test and everything works properly  
on my configuration.

the problem you are experiencing happened to me a couple  
of months ago when i was running 1.8.2. It went away but  
I can’t remember exactly how i made it go away; i was  
either doing something boneheaded or i rebooted/restarted/reinstalled  
something.

i too was surprised to see this recursive behavior but since  
i’m still so new to ruby i wrote it off as “ruby magic,” and  
sure enough the problem went away after messing with  
my configuration/code.

---

<div class="post-metadata">

**Author:** ![ara.t.howard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@ara.t.howard](https://www.ruby-forum.com/u/ara.t.howard)\
**Post date:** [December 11, 2005, 11:45pm UTC](https://www.ruby-forum.com/t/ruby-1-8-4-rc-breaks-alias-method-rails-in-bad-ways/97070/4 "2005-12-11T23:45:07Z")

</div>

On Sun, 11 Dec 2005, Michael S. wrote:

> On Friday 09 December 2005 21:06, Ara.T.Howard wrote:
> 
> > i’m on a box with latest (today’s) ruby and rails. i started seeing  
> > bizzare errors with infinite stack recursion for a simple
> 
> Does this problem occur in the production envrionment or only in development  
> environment? I’ve experienced infinite recursions numerous times and they’ve  
> always been related to the reloading that’s happening in the development  
> environment.

both. check the ruby-core mailing list for the fix i figured out…  
basically  
i just reworked a few lines that changed the alias\_method stuff going on  
and  
it’s fine (though this is hardly confidence inspiring). it’s clearly  
something pretty deep happening that’s unrelated to which env it’s run  
under.

regards.

## -a

# =============================================================================== | ara [dot] t [dot] howard [at] noaa [dot] gov | all happiness comes from the desire for others to be happy. all misery | comes from the desire for oneself to be happy. | – bodhicaryavatara

---

<div class="post-metadata">

**Author:** ![ara.t.howard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@ara.t.howard](https://www.ruby-forum.com/u/ara.t.howard)\
**Post date:** [December 12, 2005, 10:49am UTC](https://www.ruby-forum.com/t/ruby-1-8-4-rc-breaks-alias-method-rails-in-bad-ways/97070/5 "2005-12-12T10:49:50Z")

</div>

Hi,

At Sat, 10 Dec 2005 05:07:00 +0900,  
Ara.T.Howard wrote in [ruby-core:06864]:

> it seems the original instanciate is lost in this whole method shuffling  
> approach.
> 
> this code works in 1.8.2 and 1.8.3. unless the bevhaiour of alias\_methods has  
> changed - hard to beleive - this seems to be a bad bug. i’ve tried to distill  
> this to a simple example with no luck. so i’m afaid there is more to it that  
> the above. all you need do to reproduce is setup a rails dir, create a model,  
> and run YourModel.find :all.

Don’t you have simpler script which can reproduce it?

---

<div class="post-metadata">

**Author:** ![ara.t.howard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@ara.t.howard](https://www.ruby-forum.com/u/ara.t.howard)\
**Post date:** [December 11, 2005, 11:09pm UTC](https://www.ruby-forum.com/t/ruby-1-8-4-rc-breaks-alias-method-rails-in-bad-ways/97070/6 "2005-12-11T23:09:27Z")

</div>

On Friday 09 December 2005 21:06, Ara.T.Howard wrote:

> i’m on a box with latest (today’s) ruby and rails. i started seeing  
> bizzare errors with infinite stack recursion for a simple

Does this problem occur in the production envrionment or only in  
development environment? I’ve experienced infinite recursions numerous  
times and they’ve always been related to the reloading that’s happening  
in the development environment.

Michael

–  
Michael S. The Fifth Rider of the Apocalypse  
[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) is a programmer.  
[Michael Schürig | Sentenced to making sense](http://www.schuerig.de/michael/)
