Forum: Ruby on Rails Observers, models, edge, chickens and eggs

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Jay L. (Guest)
on 2007-07-31 17:50
(Received via mailing list)
Imagine the following application:

# config/environment.rb:
...
config.active_record.observers = :user_observer
...

# app/models/user.rb:
class User < ActiveRecord::Base
  MY_CONST = Other::ITS_CONST
end

# app/models/other.rb:
class Other < ActiveRecord::Base
  ITS_CONST = 1
end

# app/models/user_observer.rb:
class UserObserver < ActiveRecord::Observer
end


----
This works fine as long as the "users" and "others" tables are already
created.  However, if they're not, you can't actually run the migration
to
create those tables, because rails dies during initialization:

/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:135:in
`log':ActiveRecord::StatementInvalid: RuntimeError: ERROR     C42P01
Mrelation "users" does not exist       Fnamespace.c     L200
RRangeVarGetRelid:             SELECT a.attname, format_type(a.atttypid,
a.atttypmod), d.adsrc, a.attnotnull
              FROM pg_attribute a LEFT JOIN pg_attrdef d
                ON a.attrelid = d.adrelid AND a.attnum = d.adnum
             WHERE a.attrelid = 'users'::regclass
               AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum

This is on Cygwin with Postgres running edge rails, but I get a similar
result on a Mac with MySql (it uses "SHOW FIELDS FROM" to get the column
names instead).

The full stack is below.  Anyone have any suggestions?

RuntimeError: ERROR     C42P01  Mrelation "users" does not exist
Fnamespace.c    L200    RRangeVarGetRelid:             SELECT a.attname,
format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
              FROM pg_attribute a LEFT JOIN pg_attrdef d
                ON a.attrelid = d.adrelid AND a.attnum = d.adnum
             WHERE a.attrelid = 'users'::regclass
               AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:135:in
`log'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb:150:in
`query'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb:537:in
`column_definitions'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb:231:in
`columns'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/base.rb:842:in
`columns'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/base.rb:916:in
`inspect'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/core_ext/symbol.rb:10:in
`__send__'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/core_ext/symbol.rb:10:in
`to_proc'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:427:in
`collect'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:427:in
`log_call'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:222:in
`load_missing_constant'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:468:in
`const_missing'
/cygdrive/c/dev/src/tmp/test_observers/app/models/user.rb:2
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:203:in
`load_without_new_constant_marking'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:203:in
`load_file'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:342:in
`new_constants_in'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:202:in
`load_file'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:94:in
`require_or_load'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:248:in
`load_missing_constant'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:452:in
`const_missing'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:464:in
`const_missing'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/inflector.rb:257:in
`constantize'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/core_ext/string/inflections.rb:148:in
`constantize'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/observer.rb:144:in
`observed_class'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/observer.rb:170:in
`observed_classes'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/observer.rb:153:in
`initialize'
/usr/lib/ruby/1.8/singleton.rb:95:in `new'
/usr/lib/ruby/1.8/singleton.rb:95:in `instance'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/observer.rb:38:in
`instantiate_observers'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/observer.rb:36:in
`each'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/activerecord/lib/active_record/observer.rb:36:in
`instantiate_observers'
/cygdrive/c/dev/src/tmp/test_observers/config/../vendor/rails/railties/lib/initializer.rb:210:in
`load_observers'
/cygdrive/c/dev/src/tmp/test_observers/config/../vendor/rails/railties/lib/initializer.rb:112:in
`process'
/cygdrive/c/dev/src/tmp/test_observers/config/../vendor/rails/railties/lib/initializer.rb:49:in
`send'
/cygdrive/c/dev/src/tmp/test_observers/config/../vendor/rails/railties/lib/initializer.rb:49:in
`run'
/cygdrive/c/dev/src/tmp/test_observers/config/environment.rb:13
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
/cygdrive/c/dev/src/tmp/test_observers/vendor/rails/railties/lib/tasks/misc.rake:3
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in `call'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in `execute'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in `each'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in `execute'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:362:in `invoke'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:355:in `synchronize'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:355:in `invoke'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:369:in
`invoke_prerequisites'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1003:in `each'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1003:in `send'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1003:in `each'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:368:in
`invoke_prerequisites'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:361:in `invoke'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:355:in `synchronize'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:355:in `invoke'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1739:in `top_level'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1739:in `each'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1739:in `top_level'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1761:in
`standard_exception_handling'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1733:in `top_level'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1711:in `run'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1761:in
`standard_exception_handling'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1708:in `run'
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/bin/rake:7
/usr/bin/rake:16:in `load'
/usr/bin/rake:16
This topic is locked and can not be replied to.