How to prevent same migration timestamps when scripting?

Hi,
recently i had a need to generate lots of migrations and models from
csv fixtures. I wrote a generator script.
The problem is, it runs so "fast" that all migrations are of the same
timestamp, so i cant migrate.

#main generator file
...
  def manifest
    record do |m|
      prepared_migrations.each do |key, value|
        value.shift
        m.migration_template 'lib/migration_template.rb', 'db/
migrate',
              :migration_file_name => "create_#{key.downcase}",
              :assigns => {:table => key, :colums => value, }
      end
    end
  end
...

# migration_tempate.rb

class <%="Create#{table.capitalize}".underscore.camelize %> <
ActiveRecord::Migration
   def self.up
      create_table :<%= table.downcase %> do |t|<%- colums.each do |
value> -%>
         t.string :<%= value%><%- end -%>
      end
   end
end

Prepared migrations is a hash "table_name" => ["column_name",
"column_name", ... ]
is there a "take a break" option in migrations? or do i have to
migrate into one BIG migration?
best regards
DarkTatka

Hi,
recently i had a need to generate lots of migrations and models from
csv fixtures. I wrote a generator script.
The problem is, it runs so "fast" that all migrations are of the same
timestamp, so i cant migrate.

#main generator file
...
def manifest
   record do |m|
     prepared_migrations.each do |key, value|
       value.shift
       m.migration_template 'lib/migration_template.rb', 'db/
migrate',
             :migration_file_name => "create_#{key.downcase}",
             :assigns => {:table => key, :colums => value, }
     end
   end
end
...

# migration_tempate.rb

class <%="Create#{table.capitalize}".underscore.camelize %> <
ActiveRecord::Migration
  def self.up
     create_table :<%= table.downcase %> do |t|<%- colums.each do |
value> -%>
        t.string :<%= value%><%- end -%>
     end
  end
end

Prepared migrations is a hash "table_name" => ["column_name",
"column_name", ... ]
is there a "take a break" option in migrations? or do i have to
migrate into one BIG migration?

How many is a lot? If it's not that many and you don't do it that often just sleep for one second up in your loop when you're generating the files. Or fake it by checking the file name and if there is one with the same timestamp add a second.

Or better yet, start with Time.now.to_i and then for each migration add one to that value and use that...

-philip

Evil thought: overwrite Time.now by increasing it by one second after each migration is generated. mwahahahahaha.

Fred

Philip,
thanks for sugestions, but when i insert "sleep 2" anywhere in the
record block,
it 1) takes incredibly long,
   2) migrations are still timestamped the same, since the record
block "records" with waiting,
but "plays" without it.
generating my own timestamps should work.
I consider it a bit of a "hack", but will be using it until i find
something better (or someone else here does)

PS - lot means 100+, has to run once.

I consider it a bit of a "hack", but will be using it until i find
something better (or someone else here does)

Isn't what your doing a bit of a "hack" anyway? So what's your point,
hehe.

Please don't take that the wrong way. I was just kidding around.
However, the older incrementing migrations had other (maybe more serious
issues) and I don't think it was intended for multiple migrations to
happen within the same second. Although that is a known limitation. So I
wouldn't consider generating your own time stamps any more of a "hack"
than the problem you're trying to solve. It sounds like a workable
solution to me.

DarkTatka wrote: