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.
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 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ć;)
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
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
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)