rake db:migrate does nothing

Very strange.

I have created a couple of models, edited the migration files and run
rake db:migrate and voila, the new table is created.

Now I come to create a 3rd model, edit the migration file:

class CreateResumes < ActiveRecord::Migration
  def self.up
    create_table :resumes do |t|
      # t.column :name, :string
      t.column :institution, :string
      t.column :user_id, :integer

    end
  end

  def self.down
    drop_table :resumes
  end
end

and run rake db:migrate and it doesn't fail it just does nothing, it
creates no new table.

C:\work\1hh-b>rake db:migrate -t
(in C:/work/1hh-b)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump

C:\work\1hh-b>

Other rake commands work fine such as rake annotate_models.

This isn't the first time this has happened. It usually happens after
I have done a few migrations. Because I am a noob and building simple
test apps I just start a new project, copying over what I have done to
date and rake db:migrate works fine. But it isn't a satisfactory
solution.

Any suggestions would be great.

Thanks

Ambrose

You need to either create a new migration or roll back to the
migration before the one you are editing. If you look in your db you
will see a table called schema info. This has a single row with a
column showing the version of your migration.

If you are still developing it is fine to edit the migration, bit if
you are in production the rollback could remove data so the safest
approach is to generate a new migration.

Niels

Thanks Niels

I tried creating a new migration but once again it didn't fail but
also did not create the table.

The schema says I am on version 3 though I have tried 2 more
migrations that have not happened. If I roll back now I will roll back
to version 2 and lose a table with some test data. No big deal I
guess.

Is it your expectation that I will then be able to successfully
perform migrations once again? I'll try and see.

Thanks

Ambrose

What does the new migration you just created say is the migration
number?
How did you create the migration? The convention is migrations are
named 003NameOfMigraton where 003 refers to the migration number.

Niels

In the migrate directory I have got to 005. The foirst 3 moigrations
worked but migration 004 and 005 did not.

I just rolled back to version=2 and then ran rake db:migrate again and
it created the table for 003 but once again did not create the tables
for 004 or 005. No errors just did not do anything for 004 and 005.

Very strange.

Be sure that you have not already created these tables before. If you
have you will need to force the migration to work like so....

create_table :resumes force => true do |t|

This will allow the migration to overwrite the original table,
assuming that you have already previously created it.

--Cory

Hi Cory - nope, they are not tables I have already created - they
definitely don't exist before or after the migration :frowning:

I just don't get it. I'll use the same code when I start a new project
and it will work for a while.

Very frustrating.

Anyone else have any suggestions?

Thanks

Ambrose

show us a listing of your db/migrate directory. If you have the same class defined in more than one migration file (typically matching the CamelCased part of the filename after then number), then your migrations go haywire. One way around this is to use very long, descriptive names for your migrations.

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

Hi Rob

Thanks for the reply. Here is my migrate directory listing:

001_add_sessions.rb
002_create_admins.rb
003_create_users.rb
004_create_resumes.rb
005_create_cvs.rb

It didn't apply migration 004 so I tried another migration 005 and
that didn't apply wither. I rolled back to 002 and then migrated again
and it redid 003 but once again did not apply 004 or 005.

I am pretty sure there is something odd going on as in the past I have
created a new rails project and run the same migrations creating the
same tables and it works fine.

Cheers

Ambrose

Hi Rob

Thanks for the reply. Here is my migrate directory listing:

001_add_sessions.rb

class AddSessions (right?)

002_create_admins.rb

class CreateAdmins

003_create_users.rb

class CreateUsers

004_create_resumes.rb

class CreateResumes

005_create_cvs.rb

class CreateCvs

It didn't apply migration 004 so I tried another migration 005 and
that didn't apply wither. I rolled back to 002 and then migrated again
and it redid 003 but once again did not apply 004 or 005.

from script/console, what does this say:
puts ActiveRecord::Migrator.current_version

I'm thinking it will say 3

Of course, if any of the classes don't match the filename (more importantly, if they aren't unique), you should *make* them unique and try again.

-Rob

Yep - all the class names you wrote are as they appear in the
migration file.

All the classes match the file name and are unique.

The current version in schema.rb:

ActiveRecord::Schema.define(:version => 3) do

As I say, if I now create a new project (which I am actually going to
do as I am stuffed otherwise) then all the migrations will work. It
just seems that after a while it stops applying them for no apparent
reason in an existing project.

Crazy stuff. And very frustrating.

Thanks for your input Rob.

Hi Mark

I can absolutely confirm that I cannot get rake db:migrate to apply
more than 3 migrations. It runs with no errors but will only apply the
first 3 migrations on every new project I try. So something is clearly
preventing more than 3 migrations.

Where would I find this environment variable? I've looked in
environment.rb and development.rb and database.yml

For now I modified schema.rb from:

ActiveRecord::Schema.define(:version => 3) do

to

ActiveRecord::Schema.define(:version => 5) do

but still the migrations beyond 3 were not applied and the file gets
modified back to:

ActiveRecord::Schema.define(:version => 3) do

after I rake db:migrate

Thanks for your help - this is so frustrating and I'd love to just get
it sorted so I can get on.

Cheers

Ambrose

Well I cannot see any environment variable listed that would seem to
cause this.

However I am delighted to say that:

$>rake db:migrate VERSION=5

does indeed bypass the problem. I'll run with that for now as I plan
to move to a Mac soon and that should be the end of the problem I
hope.

Huge thanks for everyone's help :slight_smile:

Cheers

Ambrose