Полнотекстовый индекс MySQL с Rails 2.3.2 (проблема миграции) - PullRequest
7 голосов
/ 17 апреля 2009

Я использую полнотекстовые индексы MySQL в приложении Rails 2.3.2. Я добавил индекс через нативный SQL в моей миграции. Но есть известная проблема, вызывающая проблемы с schema.rb. Rails не понимает полнотекстовые индексы и пытается создать нормальный индекс. Это приведет к ошибке при создании базы данных из schema.rb (например, тестирование, спецификации и т. Д.):

Mysql::Error: BLOB/TEXT column 'text' used in key specification without a key length: CREATE  INDEX `fulltext_sms` ON `sms` (`text`)

Есть ли способ решить эту проблему в Rails 2.3.2 без использования патчей в Rails? А если нет, то как лучше всего справиться с этим?

Спасибо!

Моя миграция:

class FulltextIndexCustomersSmsMessage < ActiveRecord::Migration
  def self.up
    execute('ALTER TABLE sms ENGINE = MyISAM')
    execute('ALTER TABLE customers ENGINE = MyISAM')
    execute('CREATE FULLTEXT INDEX fulltext_sms ON sms (text(500))')
    execute('CREATE FULLTEXT INDEX fulltext_customer ON customers (fullname(255))')
  end

  def self.down
    execute('ALTER TABLE sms ENGINE = innodb')
    execute('ALTER TABLE customers ENGINE = innodb')
    execute('DROP INDEX fulltext_sms ON sms')
    execute('DROP INDEX fulltext_customer ON customers')
  end
end

schema.rb:

add_index "sms", ["text"], :name => "fulltext_sms"

Ответы [ 2 ]

5 голосов
/ 16 мая 2009

Я думаю, вам нужно установить это в вашей среде. Rb:

config.active_record.schema_format = :sql

Здесь ссылка: https://rails.lighthouseapp.com/projects/8994/tickets/74-problem-with-tests-and-custom-mysql-fulltext-indexes

1 голос
/ 18 апреля 2009

Как насчет использования одной из полнотекстовых поисковых систем, которую можно легко подключить к Rails? Избавляет вас от необходимости делать все это самостоятельно с помощью MySQL. Два хороших варианта, которые предоставляют множество настроек:

...