[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