Poniżej mały hack dla osób korzystających z acts_as_ferret testujących w dodatku zachowanie Ferret’a.
Problem: Domyślne ustawienia pluginu acts_as_ferret tworzą indeks w katalogu index/development lub index/test po uruchomienu. Plugin acts_as_ferret domyślnie ustawia indeks na dysku i nie oferuje możliwości konfiguracji (Ferret oferuje indeks na dysku lub w pamięci). Indeks na dysku po pierwsze jest wolniejszy od indeksu w pamięci a po drugie sprawia, że ZenTest - autotest wykrywa zmianę na dysku podczas testowania i co chwilę uruchamia cały zestaw testów.
To wszystko sprawia, że testowanie acts_as_ferret nie należy do przyjemnych.
Wykorzystując otwarte klasy Rubiego napisałem mały hack który podmienia niektóre ustawienia acts_as_ferret w efekcie tworząć indeks w pamięci - co rozwiązuje powyższy problem. Ostrzegam, że to jest hack a nie poprawne rozwiązanie problemu (ta funkcjonalność powinna być zaimplementowana w kodzie pluginu a nie na zewnątrz w poniższy sposób. Nie miałem za bardzo czasu na wysyłanie łatek do acts_as_ferret, zresztą od niedawna przerzuciłem się na Sphinx’a
ferret_setup.rb:
[code=ruby]# A hack to force Ferret to use in memory index and not write anything on the disk
module ActsAsFerret
def self.ensure_directory(dir)
# Do nothing
end
class LocalIndex
def initialize(aaf_configuration)
aaf_configuration[:ferret].delete(:path)
super
end
def ensure_index_exists
# Do nothing
end
end
module ActMethods
protected
def find_last_index_version(dir)
dir
end
end
end[/code]
Powyższy kod najlepiej załadować w pliku test_helper (lub spec_helper), np.:
require File.expand_path(File.dirname(__FILE__)) + '/ferret_setup'