2

delayed_job用来处理一些文件,然后用结果创建一些活动记录对象。acts_as_ferret正在为作为 drb 服务器运行的 activerecord 对象编制索引。处理作业时delayed_job,一切正常,直到活动记录尝试通过 drb 服务器与 ferret 对话。

堆栈跟踪在这里: http: //pastie.org/693588

通过控制台或不通过控制台调用相同的进程delayed_job是成功的。我的猜测是,由于某种原因,可能与权限相关,delayed_job无法与 drb 服务器通信,但不确定。有什么想法吗?

4

2 回答 2

1

哇——我在 11 月 5 日发布了同样的问题。所以,我至少必须走在正确的轨道上!:)

在生产模式下使用acts_as_ferret 的DelayedJob

为了帮助为问题提供更多背景信息:-我没有编写任何特殊代码。模型都有

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

我能够运行其他不修改记录但收集数据的延迟作业 - 所以延迟作业有效。这是我拥有的延迟作业生成器:

$ 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
于 2009-12-01T10:30:08.157 回答
0

同意评论者,发布一些代码!:-)

但是,在没有代码的情况下,很难弄清楚出了什么问题。以及 DJ 如何或为什么要与用于用户搜索的 drb 服务器通信?是在重启吗?AAF 负责对每个请求进行索引,因此如果您在后台处理某些作业,这对数据库中的索引有何影响?

于 2009-11-16T19:21:04.247 回答