如果没有InnoDB,Rails 3无法在MySQL MyISAM模式下运行吗?

rus*_*tyx 4 ruby-on-rails rails-migrations

我有一个运行InnoDB的MySQL服务器禁用(出于性能原因),使用此设置我似乎无法使用Rails 3(使用mysql2适配器).

这是我的测试迁移:

class CreateTxts < ActiveRecord::Migration
  def change
    create_table(:txts, :options => 'ENGINE=MyISAM') do |t|
      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这是错误:

>rake db:migrate
rake aborted!
Mysql2::Error: Unknown storage engine 'InnoDB': CREATE TABLE `schema_migrations`
(`version` varchar(255) NOT NULL) ENGINE=InnoDB
Run Code Online (Sandbox Code Playgroud)

尝试了这里描述的解决方法,但它似乎也没有工作(我确实修改了MysqlAdapter到Mysql2Adapter以匹配我的设置).

对不起,我是Rails的新手.任何帮助将不胜感激:o

rus*_*tyx 12

要回答我自己的问题.这是environment.rb我最终使用的补丁,它适用于本机mysql驱动程序以及JRuby/JDBC-mysql:

# Load the rails application
require File.expand_path('../application', __FILE__)

# Patch Mysql adapter to default to MyISAM instead of InnoDB
require 'active_record/connection_adapters/mysql_adapter'
module ActiveRecord
  module ConnectionAdapters
    class MysqlAdapter
      def create_table(table_name, options = {}) #:nodoc:
        super(table_name, options.reverse_merge(:options => "ENGINE=MyISAM"))
      end
    end
  end
end

# Initialize the rails application
.....
Run Code Online (Sandbox Code Playgroud)

rake db:migrate现在成功并创建所有表,包括schema_migrationsTYPE = MyISAM.

注意:对于mysql2适配器,将mysql_adapter重命名为mysql2_adapter,将MysqlAdapter重命名为Mysql2Adapter.