[Rails] Stack overflow problem

Eric Anderson eric at afaik.us
Fri Jan 7 23:35:59 GMT 2005


I have the following models (these are the relevant pieces):

class User < ActiveRecord::Base
	belongs_to :account, :foreign_key => 'account'
end

class Account < ActiveRecord::Base
	has_many :users, :foreign_key => 'account', :dependent => true,
		:order => 'username'
end

I have a controller that looks like:

class UserController < ApplicationController
def index
	puts @user.inspect
end
end

The tables for these classes are something like

CREATE TABLE account (
	id INT AUTO_INCREMENT PRIMARY KEY
)

CREATE TABLE user (
	id INT AUTO_INCREMENT PRIMARY KEY,
	account INT,
	username VARCHAR(50)
)

An an application controller with:

class ApplicationController < ActionController::Base
model :user

def process(request, response)
	@user = User.find_first ['username = ?',
		request.env['REMOTE_USER']]
	super
end

end

This basically just puts the current user in a local variable based on 
the HTTP Authentication.

If I run this from the command line with REMOTE_USER env variables set 
to a valid user I get:

  #<User:0x4039a080 @attributes={"account"=>"1", 
"username"=>"realsimple", "id"=>"1"}>

As you can see @user is a valid user retrieved from the database. Now if 
I change the controller to say:

class UserController < ApplicationController
def index
	@user.account
end
end

I get the following when run from the command line:

/web/account.realsimplehosting.com/vendor/activerecord/lib/active_record/associations.rb:511: 
[BUG] Segmentation fault
ruby 1.8.2 (2004-11-06) [i686-linux]

Aborted

If I run under the debugger I eventually get the following stack trace:

/usr/lib/ruby/1.8/debug.rb:727:in `trace_func'
/usr/lib/ruby/1.8/debug.rb:939
/usr/lib/ruby/1.8/debug.rb:938:in `account'
/vendor/activerecord/lib/active_record/associations.rb:511:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/activerecord/lib/active_record/associations.rb:514:in `account'
/vendor/actionpack/lib/action_controller/base.rb:585:in `send'
/vendor/actionpack/lib/action_controller/base.rb:585:in 
`perform_action_without_filters'
/vendor/actionpack/lib/action_controller/filters.rb:236:in 
`perform_action_without_benchmark'
/vendor/actionpack/lib/action_controller/benchmarking.rb:30:in 
`perform_action_without_rescue'
/vendor/actionpack/lib/action_controller/benchmarking.rb:30:in `measure'
/vendor/actionpack/lib/action_controller/benchmarking.rb:30:in 
`perform_action_without_rescue'
/vendor/actionpack/lib/action_controller/rescue.rb:75:in `perform_action'
/vendor/actionpack/lib/action_controller/base.rb:261:in `send'
/vendor/actionpack/lib/action_controller/base.rb:261:in `process'
/vendor/actionpack/lib/action_controller/base.rb:239:in `process'
/vendor/railties/lib/dispatcher.rb:39:in `dispatch'
dispatch.cgi:10

As you can see I am clearly getting a infinate recursive loop. I thought 
it was happening because I had a two way relationship "has_many" and 
"belongs_to", but when I remove the "has_many" relationship from Account 
I still get the same problem.

Any ideas?

I not sure which version of Rails I am running (it was a tgz). I think 
it is 0.9.1 but it may be 0.9.2. I know it is not the latest. I am going 
to try to upgrage to 0.9.3 to see if that helps.

Thank you for any information you can provide.

Eric
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 187 bytes
Desc: OpenPGP digital signature
Url : http://one.textdrive.com/pipermail/rails/attachments/20050107/4b13e8d7/signature.bin


More information about the Rails mailing list