Rails ignoring the migration file


#1

I have a mysql database that I am trying to use migrations on. The
problem that I am having is that when I create a blob field in my
migration file like so:

t.column “data”, :binary, :limit => 15.megabytes, :null => false

rails changes it to this in the schema:

t.column “data”, :binary, :default => “”, :null => false

not only is this not what I wanted because it removes the size
restrictions it also blows up when you try to do rake db_import_schema
with this error:

site_path>rake db_schema_import
(in D:/sites/itsthes/itsthes-ruby/itsthes)
rake aborted!
undefined method `string_to_binary’ for
ActiveRecord::ConnectionAdapters::ColumnDefinition:Class

Is anyone else know why this is happening? Does anyone else have a
problem with rails converting values in the schema.rb to something
other than what is in the migration file?

Thanks,
Mark


#2

Thanks Jarkko,
I was noticing that too when I went to call through the codebase
looking for the method. I was able to get around my problem by loading
my binary requirements into a later migration file, which overwrote
the schema.rb

On 1/9/06, Jarkko L. removed_email_address@domain.invalid wrote:

ActiveRecord::ConnectionAdapters::ColumnDefinition:Class
not in ColumnDefinition where it should be. This is a reported bug
Thanks,

http://lists.rubyonrails.org/mailman/listinfo/rails


#3

On 9.1.2006, at 8.35, M Daggett wrote:

not only is this not what I wanted because it removes the size
Is anyone else know why this is happening? Does anyone else have a
problem with rails converting values in the schema.rb to something
other than what is in the migration file?

Mark,

I don’t know about the changing schema definition but I know why your
migration fails. string_to_binary is for some reason in Column class,
not in ColumnDefinition where it should be. This is a reported bug
(see [1] and [2]). I’m preparing a patch with failing tests at the
moment, will post it tonight.

//jarkko

[1] http://dev.rubyonrails.org/ticket/3101
[2] http://dev.rubyonrails.org/ticket/3212


#4

I know this is probably a bad thing to do, but I modified the
ColumnDefinition class inside schema_definitions.rb to include the
self.string_to_binary method like so:

class ColumnDefinition < Struct.new(:base, :name, :type, :limit,
:default, :null) #:nodoc:
def to_sql
column_sql = “#{base.quote_column_name(name)}
#{type_to_sql(type.to_sym, limit)}”
add_column_options!(column_sql, :null => null, :default =>
default)
column_sql
end

  # added to fix missing method error when running rake tests
  # Used to convert from Strings to BLOBs
  def self.string_to_binary(value)
    value
  end

It appears to be working now for both unit testing and migrations…
though I may have broken something else I have not found yet!

Mark

On 1/9/06, M Daggett removed_email_address@domain.invalid wrote:

On 9.1.2006, at 8.35, M Daggett wrote:

moment, will post it tonight.

Jarkko L.

I am Mark Daggett and I approve this message.