Задержка при разговоре с act_as_ferret через сервер drb приводит к ошибке закрытого потока - PullRequest
2 голосов
/ 11 ноября 2009

Я использую delayed_job для обработки некоторых файлов, а затем создаю некоторые объекты activerecord с результатами. Объекты activerecord индексируются с помощью acts_as_ferret, который работает как сервер drb. Когда delayed_job обрабатывает задание, все идет хорошо, пока не достигнет точки, когда активная запись пытается связаться с хорьком через сервер drb.

Трассировка стека находится здесь: http://pastie.org/693588

Вызов одного и того же процесса через консоль или без delayed_job выполнен успешно. Я предполагаю, что по какой-то причине, возможно, связанной с разрешениями, delayed_job не имеет возможности общаться с сервером drb, но не уверен. Есть идеи, что происходит?

Ответы [ 2 ]

1 голос
/ 01 декабря 2009

Ух ты - я написал тот же вопрос 5 ноября.Итак, я должен быть на правильном пути, по крайней мере!:)

Задержка с заданием act_as_ferret в производственном режиме

Чтобы помочь с дополнительным контекстом вопроса: - я не написал специального кода.Все модели имеют

acts_as_ferret :remote => true

Инициализатор ferret_server, как обычно:

$ cat config/ferret_server.yml 
# configuration for the acts_as_ferret DRb server
# host: where to reach the DRb server (used by application processes to contact the server)
# port: which port the server should listen on
# pid_file: location of the server's pid file (relative to RAILS_ROOT)
# log_file: log file (default: RAILS_ROOT/log/ferret_server.log
# log_level: log level for the server's logger
production:
  host: localhost
  port: 9010
  pid_file: log/ferret.pid
  log_file: log/ferret_server.log
  log_level: warn

Я могу запустить другой delayed_job, который НЕ изменяет записи, но собирает данные - так работает delayed_job.Это спавнер delayed_job, который у меня есть:

$ cat script/delayed_job 
#!/usr/bin/env ruby

ENV['RAILS_ENV'] = 'production'
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'boot'))
require 'delayed/command'

Delayed::Command.new(ARGV).daemonize
0 голосов
/ 16 ноября 2009

Договорились с комментатором, выложите какой-нибудь код! : -)

Однако из-за отсутствия кода слишком сложно понять, что пошло не так. И как или почему DJ общается с сервером drb, который используется для поиска пользователей? Это перезапускает это? AAF заботится об индексации каждого запроса, поэтому, если вы обрабатываете какую-то работу в фоновом режиме, как это влияет на индекс в базе данных?

...