• DoRubyとは
  • お問い合わせ
  • Ruby/Rails
  • Web開発
  • Webマーケティング
  • アピリッツ
  • ライフハック
  • ゲーム制作/開発
  • Railsの小技
  • Rubyの小技
  • Gemの紹介
  • ActiveRecord
  • 初心者向け
  • Java/Scalaテク
  • Unixのあれこれ
  • データベース
  • スマホ開発
  • HTML/CSS/JavaScript
  • デザイン製作
  • インフラ
  • クラウド
  • セキュリティ
  • エディタ
  • バージョン管理
  • その他
  • python
  • アクセス解析
  • Googleアナリティクス
  • Googleデータスタジオ
  • Web広告
  • SEO
  • UI/UX
  • ソーシャルメディア
  • EC開発
  • Webシステム開発
  • コンサルティング
  • Webデザイン
  • ブロックチェーン
  • ゲーム紹介
  • アプリ紹介
  • ASP
  • 風景
  • パソコン
  • ツール
  • ガジェット
  • 仕事術
  • 健康
  • 生活
  • 書評
  • Excel(エクセル)
  • PowerPoint(パワーポイント)
  • ゲームプランニング
  • SpriteStudio
  • マスターデータ入力/作成
  • Unity
  • キャラクターデザイン
  • ゲームシナリオ
  • レベルデザイン
  • ゲーム分析
  • 3DCG
  • イラスト制作
  • CG/アニメーション
  1. ホーム
  2. Ruby/Rails
  3. ActiveRecord
  4. MyISAMテーブル(Sennaを使った全文検索など)を利用している場合にテストでこけた場合の対処法
  • 2009-12-07
    • カテゴリ:
    • ActiveRecord

MyISAMテーブル(Sennaを使った全文検索など)を利用している場合にテストでこけた場合の対処法

この記事は公開から1年以上が経過しています。情報が古い可能性がありますのでご注意ください。

ご無沙汰しています。KBMJのプログラマのx5rです。

今回は、MySQL+Sennaを利用したプロジェクトでrspecでテストを実行したところ、エラーが発生したため、その対処法を書いてみます。

環境

  • OS : Mac OS X 10.5.8
  • Rails : 2.2.3
  • MySQL : mysql5 @5.0.45_0+innodb+senna+server+utf8(MacPorts)

対象となるテーブルのマイグレーションは


class CreateSearches < ActiveRecord::Migration
  def self.up
    create_table :searches, :options => "ENGINE = MYISAM" do |t|
      t.text     :description
      t.timestamps
    end
    add_index :searches, [:description], :fulltext => true
  end

  def self.down
    drop_table :searches
  end
end

だいたいこんな感じです。(この記事用に想定しているテーブルです。実際にこのテーブルでは試してません.)

今回のプロジェクトでMySQL+Sennaによる全文検索テーブルを利用しているのですが、いざrspecでテストを流してみると以下のようなエラーが発生しました。(実際にこのテーブルでは試してません.)


$ rake spec
rake aborted!
Mysql::Error: The used table type doesn't support FULLTEXT indexes: CREATE FULLTEXT INDEX  `index_searches_on_description`  ON searches (`description`)

(See full trace by running task with --trace)

原因は、まだ開発初期段階でmigrationファイルがいたずらに増えるのがイヤで


$rake db:migrate:reset RAILS_ENV=test

などでテーブルを再生成していたのですが、このrakeコマンドはテーブルのスキーマ情報をダンプ、ロードして作り直しているのですが、その際にテーブルのengineを意識して作り直していないことです。

したがって、ダンプする際に、engineオプションも吐き出すようにすれば良さそうです。

そこで力技ですが、以下のパッチ的なものを書いてみました。
今のところうまく通っています。

要は30〜33行目でengineタイプがMyISAMの時にその情報もダンプに出力するように、activerecord-2.2.3/lib/active_record/schema_dumper.rbのtableメソッドを書き直しているだけです。

このファイルをconfig/initializers直下におけば、毎回ロードされて、正しくテーブルが作り直され、spec(テスト)が通るようになります。
全文検索云々ではなく、MyIASMを利用している環境でエラーが発生している場合は、お試しください。

そもそも、この状況って皆さんは遭遇してなかったりしないのですかね?
バグじゃないのかと思ったりしたのですが。。。
もし、この状況について、他に簡単な方法などをご存知の方やそもそも私の認識が間違っていましたら、ご連絡いただければと思います。


  • 38 views
    • Tweet
    • このエントリーをはてなブックマークに追加

この記事を書いた人
m
MacでRuby on Rails開発!

「いいね!」するとDoRubyの最新記事を受け取ることができます。

Facebook

Twitterから最新記事を受け取るならこちら

Follow @doruby

Feedlyから最新記事を受け取るならこちら

follow us in feedly

おすすめの記事
  • 693 views
  • 2015-10-01
RailsのViewを自在にカスタマイズするための「Cosme」gem
  • 878 views
  • 2016-07-31
carrierwaveとfogでRiak CSへの画像アップロードを実装する

カテゴリ

Ruby/RailsRailsの小技Rubyの小技Gemの紹介ActiveRecord初心者向けWeb開発Java/ScalaテクUnixのあれこれデータベーススマホ開発HTML/CSS/JavaScriptデザイン製作インフラクラウドセキュリティエディタバージョン管理その他pythonWebマーケティングアクセス解析GoogleアナリティクスGoogleデータスタジオWeb広告SEOUI/UXソーシャルメディアアピリッツEC開発Webシステム開発コンサルティングWebデザインブロックチェーンゲーム紹介アプリ紹介ASP風景ライフハックパソコンツールガジェット仕事術健康生活書評Excel(エクセル)PowerPoint(パワーポイント)ゲーム制作/開発ゲームプランニングSpriteStudioマスターデータ入力/作成Unityキャラクターデザインゲームシナリオレベルデザインゲーム分析3DCGイラスト制作CG/アニメーション

    人気の記事
    最近の記事
    • 3,598 views
    • 2020-04-02
    Kali Linux 2020.2 導入と日本語化
    • 828 views
    • 2020-03-06
    rack-lineprofを改造して管理画面からファイル指定&ログ追跡出来るように
    • 802 views
    • 2020-03-05
    FactoryBot と Gimei を使って架空のユーザを作る
    • 584 views
    • 2020-02-04
    ActionCable実装しようwith webpack
    • 517 views
    • 2020-01-27
    この頃のプルリクに対するレビュー
    Facebook

      サイト情報
      • DoRubyとは
      • 株式会社アピリッツ

      ソーシャルアカウント
      • Facebook
      • Twitter

      企業情報
      • 会社概要
      • 採用情報
      • お問い合わせ
      サービス製品
      • レコメンドASP
      • サイト内検索ASP「Advantage Search」
      • オープンソースECサイト構築パッケージ「エレコマ」
      • 受注・在庫・商品情報一元管理「モールコネクター」
      • セキュリティ診断サービス
      • Googleアナリティクスセミナー

      Copyright © Appirits All Rights Reserved.