Thinking Sphinx i automatyczne indeksowanie

Na początek wypada się przywitać bo jestem nowy. Więc witam:)

Problem wygląda następująco - używam gema Thinking Sphinx i chciałbym, żeby automatycznie indeksował zawartość tablic. Po przemyśleniu sprawy stwierdziłem, że użyję do tego gema rufus-scheduler (pracuję na windowsie, więc w tym miejscu odpada wszystko, co ma związek z cronem). Problem polega na tym, że nie mogę wywołać standardowych poleceń rake (w tym przypadku ts:index).

Wyskakuje wtedy błąd:

Don't know how to build task 'ts:index'

Tymczasem, polecenie rake -T działa wzorowo w konsolce. Jeżeli zdefiniuję sobie sam jakiegoś taska (w folderze lib/tasks/), a potem wywołuję go sobie w pliku zawierającym wykonywane zadania przez scheduler (plik .rb znajduje się w katalogu lib i jest startowany z enviroment.rb), task wykonuje się bez problemów.

tzn.

[code]require ‘rake’
require ‘rubygems’
require ‘rufus/scheduler’
load File.join( Rails.root, ‘lib’, ‘tasks’, ‘own_tasks.rake’)

scheduler = Rufus::Scheduler.start_new

scheduler.in ‘5s’ do
force_invoke (“own_namespace:my_own_task”) # to wykona się wzorowo
end

scheduler.every ‘5s’ do
force_invoke (“ts:index”) # a to wyrzuci błąd “Don’t know how to build task ‘ts:index’”
end

####definicja force_invoke:

def force_invoke(task)
task.reenable
task.invoke
end[/code]
W miejscu ts:index mogę wykonać jakikolwiek task, który znajduje się w rake (co potwierdza rake -T), a i tak pojawi się błąd

Jeżeli moje pytanie jest głupie to przepraszam :wink:

Jeżeli używasz rails 2 to w może zapomniałeś w Rakefile dorzucić

require 'thinking_sphinx/tasks'

Nie wiem na ile można ufać temu co pokazuje rake -T, ale u mnie akurat taska ts:index na liście nie ma (inne ts:… są). Nie zmienia to faktu, że mogę go jednak bez problemu odpalić;)

A i jeżeli chodzi o przebudowanie indeksu to nie zawsze potrzeba to robić dla wszystkich danych od zera -> http://freelancing-god.github.com/ts/en/deltas.html

Tak troche offtopic:

rake -T nie wyswietla wszytskich dostepnych taskow, a tylko te z opisem (desc), jeśli piszemy taska ktory nie jest samodzielny powiedzmy a bedzie wywolywany poprzez inny task. Nie zmienia to faktu ze takie ukryte taski mozna wywolywac bez problemu.

pplcanfly, dzięki za cenną radę z delta indexes. Używam Rails3. Wciąż nie działają mi standardowe taski z rake (nawet takie jak Rake::Task[“db:version”]).
Jak ktoś ma jakieś pomysły to chętnie posłucham :wink:

a odpalasz to wprost czy przez bundle exec rake … jak wprost to sprobuj z bundle

bundle exec wewnątrz pliku? Bo jeżeli chodzi o terminal, to nie mam problemów z rake. Mógłbyś mnie naprowadzić jak tego używać, bo wywołując

system "bundle exec rake ts:index"

pojawia się wiele procesów cmd

edit:
działa również

system (rake ts:index)

Taski nie wywołują się jednak tak, jak wynikałoby to z schedulera. Podejrzewam, że jest to problem z reenable (który wcześniej mogłem obejść dzięki funkcji force_invoke() )

Czasem jak potrzebuje przeindeksowac pojedynczy model to robie:

controller = ThinkingSphinx::Configuration.instance.controller controller.index *ModelName.sphinx_index_names
Ale raki nigdy nie robiły mi żadnych problemów

Chyba pora byś wysnuł wniosek że windows się nie nadaje i zaczął to samo na Linuksie robić. Choćby na VM.

W tym przypadku nie było to zależne ode mnie :slight_smile:

Ostatecznie rozwiązałem sprawę Sphinxa w następujący sposób:

raki wywołuje nie poprzez Rake::Task["…’], ale przez system (“rake …”)
indeksowanie (delta na podstawie updated_at) robię przy pomocy rufus-schedulera (polecam, całkiem przyjemne narzędzie, kiedy nie masz do dyspozycji crona)

Dzięki wszystkim za rady :slight_smile: