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

On 6 Nov 2007, at 12:59, fredistic wrote:

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

On 11/6/07, fredistic [email protected] wrote:

exists
: CREATE TABLE schema_info (version integer)

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

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.

fredistic wrote:

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

The schema_info error indicates that something may be borked in your
migration naming. You have confirmed that you do not have two
migrations whose file names differ only by the number prefix, right?

If that is not the problem then what does your class
attachment_image(s???) < ActiveRecord::Base in
app/models/attachment_image(s???).rb say? If that is consistent with
your class name then what does your class attachment_image(s???) <
ActiveRecord::Migration in the db/migrate/004_attachment_image(s???).rb
migration file say?

You may have a problem with the naming of your classes if in truth you
use plural in some places and singular in others.

Regards,

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…

On Nov 6, 7:17 pm, James B. [email protected]

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…

On Nov 6, 7:17 pm, James B. [email protected]

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 .
11/06/2007 03:42 PM …
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:inconst_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:inconstantize’
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:inmigration_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:ininject’
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:ininject’
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:inmigrate’
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:inmigrate’
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:inexecute’
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:inexecute’
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:insynchronize’
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:inrun’
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:inrun’
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

fredistic wrote:

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…

On Nov 6, 7:17 pm, James B. [email protected]

Convention over configuration.

Rails depends upon the contents of its project files having class names
consistent with its conventions and maintaining the relationship of the
class name to the name of the containing file is one of those
conventions.