加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如果没有InnoDB,无法在MySQL MyISAM模式下运行

发布时间:2020-12-17 04:04:35 所属栏目:百科 来源:网络整理
导读:我有一个运行InnoDB的 MySQL服务器禁用(出于性能原因),这个设置我似乎无法使用Rails 3(使用mysql2适配器). 这是我的测试迁移: class CreateTxts ActiveRecord::Migration def change create_table(:txts,:options = 'ENGINE=MyISAM') do |t| t.timestamps e
我有一个运行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的补丁我最终得到了与本机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现在成功并创建所有表,包括TYPE = MyISAM的schema_migrations.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读