带有Rails 2.3.2的MySQL全文索引(迁移问题)

时间:2009-04-17 07:57:41

标签: mysql sql ruby-on-rails mysql-error-1170

我在Rails 2.3.2应用程序中使用MySQL全文索引。我在迁移中通过本机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的情况下在Rails 2.3.2中解决这个问题?如果没有,最好的方法是什么?

谢谢!

我的迁移:

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 个答案:

答案 0 :(得分:5)

我认为你需要在你的环境中设置它.rb:

config.active_record.schema_format = :sql

此处引用:https://rails.lighthouseapp.com/projects/8994/tickets/74-problem-with-tests-and-custom-mysql-fulltext-indexes

答案 1 :(得分:1)

如何使用其中一个可以轻松插入Rails的全文搜索引擎?使用mysql可以省去自己的麻烦。提供大量定制的两个好选择是: