# Observers, models, edge, chickens and eggs

**URL:** <https://www.ruby-forum.com/t/observers-models-edge-chickens-and-eggs/110856>\
**Category:** Rails\
**Created:** [July 31, 2007, 3:50pm UTC](https://www.ruby-forum.com/t/observers-models-edge-chickens-and-eggs/110856 "2007-07-31T15:50:42Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jay-levitt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/a88e57/32.png) [@jay-levitt](https://www.ruby-forum.com/u/jay-levitt)\
**Post date:** [July 31, 2007, 3:50pm UTC](https://www.ruby-forum.com/t/observers-models-edge-chickens-and-eggs/110856/1 "2007-07-31T15:50:42Z")

</div>

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
