Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #5810 (closed defect: invalid)

Opened 2 years ago

Last modified 2 years ago

SystemStackError: stack level too deep

Reported by: tobias.neumann@gmail.com Assigned to: David
Priority: high Milestone: 1.2
Component: ActiveRecord Version: edge
Severity: major Keywords: gettext
Cc: donald.piret@gmail.com

Description (Last modified by bitsweat)

Hi

I have two models Keyword and KeywordResult, they basically look like this:

class KeywordResult < ActiveRecord::Base
	belongs_to :keyword
	validates_presence_of :title, :url, :keyword_id
end

class Keyword < ActiveRecord::Base
	has_many :keyword_results, :dependent => :delete_all
	acts_as_tree :order => "text", :foreign_key => "top_keyword"
end

Before you ask: I commented out all callbacks.

now when I want to add a KeywordResult I get a SystemStackError.

kw = Keyword.find(72)
=> #<Keyword:0x2595ec4 @attributes={"updated_at"=>"2006-07-25 23:50:54", "text"=>"my keyword", "lock_version"=>"14", "id"=>"72", "lang"=>"de", "top_keyword"=>"68", "created_at"=>"2006-07-25 01:56: 48"}>
kw.keyword_results
=> []
kw.keyword_results << KeywordResult.new({:title => "foobar", :url => "foobar"})

SystemStackError: stack level too deep
        from ./script/../config/../config/../vendor/rails/activerecord/lib/../../activ esupport/lib/active_support/core_ext/class/inheritable_attributes.rb:100: in `read_inheritable_attribute'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/callbacks.rb:354:in `callbacks_for'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/callbacks.rb:330:in `callback'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/callbacks.rb:296:in `valid?'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/validations.rb:743:in `save_without_transactions'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:120:in `save_without_validation'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/connection_adapters/abstract/database_statements.rb:51:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:86:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:112:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:120:in `save_without_validation'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/validations.rb:744:in `save_without_transactions'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:120:in `save_without_validation'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/connection_adapters/abstract/database_statements.rb:51:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:86:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:112:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:120:in `save_without_validation'
... 1229 levels...
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:120:in `save_without_validation'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/validations.rb:744:in `save_without_transactions'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:120:in `save_without_validation'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/connection_adapters/abstract/database_statements.rb:51:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:86:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:112:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:120:in `save_without_validation'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/validations.rb:744:in `save'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/associations/has_many_association.rb:160:in `insert_record'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/associations/association_collection.rb:26:in `<<'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/associations/association_collection.rb:23:in `<<'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/connection_adapters/abstract/database_statements.rb:51:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:86:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/transactions.rb:112:in `transaction'
        from ./script/../config/../config/../vendor/rails/activerecord/lib/active_reco rd/associations/association_collection.rb:22:in `<<'

I hope you have some ideas..

Thanks, Tobias

Change History

(follow-up: ↓ 2 ) 08/28/06 08:29:11 changed by tobias.neumann@gmail.com

  • priority changed from low to high.
  • severity changed from normal to major.

PS: The code works perfectly with rails 1.1.6. This error occurs at rails-trunk - I need it because of the advanced/new routing.

(in reply to: ↑ 1 ) 09/08/06 20:23:05 changed by Donald Piret

Replying to tobias.neumann@gmail.com:

PS: The code works perfectly with rails 1.1.6. This error occurs at rails-trunk - I need it because of the advanced/new routing.

Hello Tobias, Are you by any chance using gettext with your project? I'm having a very similar problem with my project (also on trunk, works fine on 1.1.6), but commenting out any reference to gettext solved it for me.

09/08/06 23:49:19 changed by Donald Piret

  • cc set to donald.piret@gmail.com.

09/09/06 12:09:48 changed by tobias.neumann@gmail.com

Yes, that was the problem and the reason I closed this ticket as invalid (it's somehow gone?). gettext 1.7.0 does not work properly with rails trunk.

I located the problem, and this seems to fix it:

--- a/lib/gettext/rails.rb
+++ b/lib/gettext/rails.rb
@@ -193,7 +193,7 @@ module ActiveRecord #:nodoc:
   end
 
   module Validations # :nodoc:
-    def self.append_features(base) # :nodoc:
+    def self.included(base) # :nodoc:
       super
       base.extend ClassMethods
       base.class_eval{

Changeset [4310] introduced included instead of append_features. (super call is still required in gettexts rails.rb)

(follow-up: ↓ 6 ) 11/13/06 08:07:24 changed by bitsweat

  • status changed from new to closed.
  • description changed.
  • version set to edge.
  • milestone set to 1.2.
  • keywords set to gettext.
  • resolution set to invalid.

(in reply to: ↑ 5 ; follow-up: ↓ 7 ) 11/21/06 18:24:33 changed by datanomisch

  • status changed from closed to reopened.
  • resolution deleted.

Replying to bitsweat:

They (GetText 1.8) seem to test for "ActiveRecord::VERSION::STRING" which does not seem to work in EDGE. Isn't this string defined in EDGE? If not, one possible solution for all kinds of these problems would be to defined this string as version of the next release e.g. 1.2 and append EDGE to it like so: "ActiveRecord::VERSION::STRING = '1.2-EDGE'". That way all tests using version > or version < would still work and test for equality wouldn't (as intended).

(in reply to: ↑ 6 ) 01/15/07 06:55:33 changed by dcmanges

  • status changed from reopened to closed.
  • resolution set to invalid.

Replying to datanomisch:

They (GetText 1.8) seem to test for "ActiveRecord::VERSION::STRING" which does not seem to work in EDGE.

Loading development environment.
>> ActiveRecord::VERSION::STRING
=> "1.14.4"