Alex Rivera | Logout

Rails Schema creation problem

Asked 2008-12-20T07:26:15.803
11

I am using Jruby and rails 2.2.2. My problem is I have a migration that is not being correctly written to the database schema.

Here is my migration:

class CreateNotes < ActiveRecord::Migration
  def self.up
    create_table(:notes, :options => 'ENGINE=MyISAM') do |t|
      t.string :title
      t.text :body

      t.timestamps
    end

    execute "alter table notes ADD FULLTEXT(title, body)"

end

Here is what it produces on in schema.rb

create_table "notes", :force => true do |t|
  t.string   "title"
  t.text     "body"
  t.datetime "created_at"
  t.datetime "updated_at"
end

add_index "notes", ["title", "body"], :name => "title"

I have two question:

  • How do I get 'ENGINE=MyISAM' into the schema?
  • Why did my execute statement become add_index "notes", ["title", "body"], :name => "title"? and how do I force migrations to leave it as an execute statement?

Thanks to Christian Lescuyer for the answer. However, when I tried this nothing changed. I uncommented the config.active_record... line but, my schema has not changed. I have tried this in jruby and on ruby 1.8.6 with rails 2.2.2 and edge rails and there is not changes in the schema. Can anybody tell me what I am doing wrong?

Edit
Report

2 Answers

1

christian is right.

do

config.active_record.schema_format = :sql

in environment.rb

but then you have to use a different schema dump format and file location. try doing your migration and looking for "schema.sql" instead of scehema.rb

the reason for all of this is that the point of the scheme file is a database unspecific (works for all types of databases) file. so when you use features which only work on mysql through an unsupoorted execute statement, they can't be shoehorned in to schema.rb

answered 2008-12-22T10:12:46.090
1

To use the SQL variant for testing (instead of schema.rb), you'll need to use

rake db:test:clone_structure

Our schema uses UUIDs (uuid gem) and also Red Hill on Rails (RHoR) nice FK plug-in. Unfortunately, the FKs require PKs that can only be added using EXECUTES in the migrations.

It's well known that these executes do not make it to the schema.rb; however, it was harder to find the rake alternative to db:test:prepare for apps that cannot use schema.rb.

answered 2009-09-21T16:23:15.343

Your Answer