2011-10-04 39 views
2

我想在mysql集羣上設置rails 3應用程序。我注意到,無論何時使用rake db創建表:create或rake db:migrate,都會使用engine = InnoDb創建表。由於我正在使用MySQL羣集,這是有問題的。我必須創建引擎= NDB的表格。我想知道什麼是修改rake db的最佳方法:create and rake db:migrate logic,以便它創建帶有engine = NDB的表。修改rake db命令以使用不同的mysql引擎

感謝/

回答

5

對現有的表,你應該創建一個遷移更改表,裏面你需要執行ALTER TABLE命令:

class Change < ActiveRecord::Migration 
    def self.up 
    execute('ALTER TABLE some_tables ENGINE = NDB') 
    end 

    def self.down 
    execute('ALTER TABLE some_tables ENGINE = innodb') 
    end 
end 

但對於新的模式,你可以使用:在CREATE_TABLE方法選項選項:

create_table :some_tables, :option => 'ENGINE = NDB' do |t| 
... 
end 

http://guides.rubyonrails.org/v3.0.3/migrations.html#creating-a-table

+0

可能rails的bug,但是在上面執行('alter table ...')不會正確地更改schema.rb,所以我假設當你運行rake db:schema:load時引擎返回到innodb(默認)。 – Kazuki

+0

對不起,我的壞。 schema.rb不應該包含這樣的信息,因爲它應該與數據庫無關。我需要使用sql樣式轉儲(http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you) – Kazuki