Есть идеи, почему задачи Thinking Sphinx Rake не выполняются? - PullRequest
8 голосов
/ 28 апреля 2011

Я обнаружил, что Thinking Sphinx иногда выдает ошибку, когда я пытаюсь запустить задачи Rake.Иногда задачи работают нормально, а иногда я получаю ошибки, подобные приведенной ниже.

Я запускаю задачи как обычный пользователь, а не как root.Не используется sudo.

В приведенном ниже примере searchd все еще работает после сбоя задачи Rake.

Я также видел похожие ошибки с ts:rebuild.

ИмеетКто-нибудь еще видел это?

Я использую Sphinx 0.9.9-release (r2117)

Я использую Thinking Sphinx 1.4.4 вместо последней версии, потому что я на Rails2.3.11.


$ rake ts:stop RAILS_ENV=production
(in /var/www/blog_app/releases/20110425053509)
rake aborted!
execution expired

(See full trace by running task with --trace)
[ethan@apphost current]$ rake ts:stop RAILS_ENV=production --trace
(in /var/www/blog_app/releases/20110425053509)
** Invoke ts:stop (first_time)
** Invoke thinking_sphinx:stop (first_time)
** Invoke thinking_sphinx:app_env (first_time)
** Execute thinking_sphinx:app_env
** Invoke environment (first_time)
** Execute environment
** Execute thinking_sphinx:stop
rake aborted!
execution expired
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/1.8/timeout.rb:60
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/thinking-sphinx-1.4.4/lib/thinking_sphinx/tasks.rb:58
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:607:in `invoke_prerequisites'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:604:in `each'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:604:in `invoke_prerequisites'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:596:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31
/opt/ruby/bin/rake:19:in `load'
/opt/ruby/bin/rake:19

Ответы [ 5 ]

11 голосов
/ 03 мая 2011

Я считаю, что эта ошибка вызвана тем, что у вас уже запущен поисковый демон.

Попробуйте

ps | grep searchd

если это даст вам что-то вроде этого ...

73470 ttys002    0:00.03 searchd --pidfile --config /Users/dwickwire/Projects/production/config/development.sphinx.conf
81907 ttys002    0:00.00 grep searchd

затем убейте поисковика

sudo kill -9 process_id

process_id в моем случае будет 73470

Тогда попробуйте rake ts: rebuild снова.

6 голосов
/ 24 мая 2011

Я попробовал команду 'ps | grep searchd, чтобы получить идентификатор процесса, но я не получил его. Затем я попробовал команду 'pgrep searchd', она дает мне идентификатор процесса. Я убил этот процесс и выполнил команду 'rake ts: rebuild'. Это сработало.

Я писал обо всем опыте здесь (отказ от ответственности: я автор).

3 голосов
/ 26 июня 2011

В think_sphinx 1.4.4 есть 5-секундный таймаут на rake ts:stop

Если rake ts:stop занимает около 5 секунд или дольше, ruby ​​выдаст исключение.

Тем временем я использую think_sphinx 1.3.18.(тайм-аут на 1.3.18 отсутствует).

Также я отправил патч в репозиторий github , и время ожидания будет настраиваться с помощью переменной конфигурации sphinx.yml stop_timeout.

ПРИМЕЧАНИЕ: rake ts:rebuild== rake ts:stop; rake ts:index; rake ts:start

0 голосов
/ 21 августа 2013

Проблема

Эта проблема возникает, если ваш searchd упал или вы убили его вручную. В Windows он не перезаписывает ваш searchd.<environment>.pid, поэтому старый PID сохраняется, и ThinkingSphinx не проверяет реальные запущенные процессы в вашем диспетчере задач. Таким образом, все эти команды (rake ts:restart, rake ts:rebuild, ...) не будут работать, rake всегда будет прерываться, и вы получите ошибку rake aborted, ... searchd already running

Решение

Удалить ваш path-to/your-app/log/searchd.<environment>.pid.

<environment> может быть development или production, в зависимости от вашей текущей стадии.

Надеюсь, этот ответ поможет гуглеру.

0 голосов
/ 26 января 2013

Полагаю, что после развертывания capistrano вы не запустили rake thinking_sphinx:configure
, он сгенерирует конфигурационный файл sphinx в config/production.sphinx.conf

, попробуйте добавить pidfile в config/sphinx.yml

production:
  ...
  pid_file: "/tmp/searchd.pid"

он обязательно найдет pid searchd для уничтожения

и добавит следующий код в config/deploy.rb

namespace :my_tasks do
  task :generate_sphinx_config, :roles => [:web] do
    run "cd #{latest_release} && RAILS_ENV=#{rails_env} bundle exec rake thinking_sphinx:configure"
  end
end

....

after :deploy, "my_tasks:generate_sphinx_config"

для создания файла конфигурации sphinx в каждой папке выпуска

...