ruby-on-rails - 没有 InnoDB,Rails 3 不能在 MySQL MyISAM 模式下运行吗?

标签 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

这是错误:
>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/

相关文章:

ruby-on-rails - ruby 调试 : Skip Rails Code

mysql - 对象.limit(x).sum( :value) ignores the limit(x) -- why?

ruby-on-rails - 管理同一台机器上不同分支的 Rails 迁移

ruby-on-rails - 为 nil :NilClass only with RubyMine debugger on 获取未定义的方法 `+'

ios - Rails "as_json"方法返回无效的 json?

ruby-on-rails - 使用rake db :migrate straight, Vanilla SQL

ruby-on-rails - Rails Migration Change vs Up & Down 方法

ruby-on-rails - 索引名称太长 - Rails 3

ruby-on-rails - rails + Postgres : How to select count of how many records are updated or inserted?

ruby-on-rails - Acts_as_taggable_on 索引太长