我有一个禁用 InnoDB 的 MySQL 服务器(出于性能原因),使用此设置我似乎无法使用 Rails 3(使用 mysql2
适配器)。
这是我的测试迁移:
class CreateTxts < ActiveRecord::Migration
def change
create_table(:txts, :options => 'ENGINE=MyISAM') do |t|
t.timestamps
end
end
end
这是错误:
>rake db:migrate
rake aborted!
Mysql2::Error: Unknown storage engine 'InnoDB': CREATE TABLE `schema_migrations`
(`version` varchar(255) NOT NULL) ENGINE=InnoDB
尝试了 here 描述的解决方法,但它似乎也不起作用(我确实将 MysqlAdapter 修改为 Mysql2Adapter 以匹配我的设置)。
抱歉,我是 Rails 的新手。任何帮助将不胜感激:o
最佳答案
要回答我自己的问题。这是我最终得到的 environment.rb
补丁,它适用于 native 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
.....
rake db:migrate
现在成功并创建包括 schema_migrations
和 TYPE=MyISAM 的所有表。注意:对于 mysql2 适配器,将 mysql_adapter 重命名为 mysql2_adapter,将 MysqlAdapter 重命名为 Mysql2Adapter。
关于ruby-on-rails - 没有 InnoDB,Rails 3 不能在 MySQL MyISAM 模式下运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702295/