Why is this migration trying to re-create schema_info?

Postgresql Migration Failure on 4th migration (attachment_fu). A migration fails mysteriously.

The console says: rake aborted! uninitialized constant AttachmentImages

The log says:   SQL (0.000000) PGError: ERROR: relation "schema_info" already exists : CREATE TABLE schema_info (version integer)

Of course it exists, it's up to 3.

The database is not modified.

Rails 1.2.4, ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]

The failing migration looks okay to me:   def self.up     add_column :images, :parent_id, :integer     add_column :images, :content_type, :string     add_column :images, :filename, :string     add_column :images, :thumbnail, :string     add_column :images, :size, :integer

    add_index :images, :artist_id   end

fredistic

Postgresql Migration Failure on 4th migration (attachment_fu). A migration fails mysteriously.

The console says: rake aborted! uninitialized constant AttachmentImages

Is there a stack trace to go with that ?

Fred

Those are two different problems. The second is unrelated to the first and can be ignored. AR just blindly tries to create the schema_info in every migration; it ignores the "already exists" problem.

You need to investigate the AttachmentImages problem.

F.C. asked for a stack trace. Changing the file name changes the name of the uninitialized constant that triggers the error, matching it. Here it is called 004_imaginary.rb. So the "uninitialized constant' it complains about is 'Imaginary'. I've tried other names and the error message follows the file name.

I can use rake db:migrate VERSION=2 and 3 to go back and forth without a problem. Putting in 'VERSION=4' results in identical error messages, of course. Schema_info in the database is 3.

dir db\migrate

Directory of C:\InstantRails\rails_apps\g1\db\migrate

11/06/2007 03:42 PM <DIR> . 11/06/2007 03:42 PM <DIR> .. 10/19/2007 03:44 PM 474 001_create_images.rb 10/19/2007 03:44 PM 612 002_create_users.rb 10/19/2007 03:44 PM 561 003_more_user.rb 11/06/2007 03:39 PM 767 004_imaginary.rb                4 File(s) 2,414 bytes                2 Dir(s) 18,688,790,528 bytes free

rake --trace db:migrate

(in C:/InstantRails/rails_apps/g1) ** Invoke db:migrate (first_time) ** Invoke environment (first_time) ** Execute environment ** Execute db:migrate rake aborted! uninitialized constant Imaginary C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.3/lib/ active_support/dependencies.rb:266:in `load_missing_constant' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.3/lib/ active_support/dependencies.rb:452:in `const_missing' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.3/lib/ active_support/dependencies.rb:464:in `const_missing' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.3/lib/ active_support/inflector.rb:250:in `constantize' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.3/lib/ active_support/core_ext/string/inflections.rb:148:in `constantize' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.4/lib/ active_record/migration.rb:366:in `migration_class' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.4/lib/ active_record/migration.rb:346:in `migration_classes' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.4/lib/ active_record/connection_adapters/abstract_adapter.rb:128:in `inject' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.4/lib/ active_record/migration.rb:342:in `each' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.4/lib/ active_record/migration.rb:342:in `inject' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.4/lib/ active_record/migration.rb:342:in `migration_classes' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.4/lib/ active_record/migration.rb:330:in `migrate' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.4/lib/ active_record/migration.rb:297:in `up' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.4/lib/ active_record/migration.rb:288:in `migrate' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-1.2.4/lib/tasks/ databases.rake:4 C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb: 399:in `call' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb: 399:in `execute' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb: 399:in `each' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb: 399:in `execute' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb: 369:in `invoke' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb: 362:in `synchronize' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb: 362:in `invoke' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb: 1935:in `run' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb: 1935:in `each' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb: 1935:in `run' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/bin/rake:7 C:/InstantRails/ruby/bin/rake.bat:20:in `load' C:/InstantRails/ruby/bin/rake.bat:20

fredistic

I changed the name of the class to match the name of the .rb file and and it just worked. I did not understand they had to be the same. Perhaps I once knew and forgot? Thanks for all the help...

I changed the name of the class to match the name of the .rb file and and it just worked. I did not understand they had to be the same. Perhaps I once knew and forgot? Thanks for all the help...