我正在使用delayed_job处理一些文件,然后使用结果创建一些活动记录对象。活动记录对象被作为drb服务器运行的acts_as_ferret索引。当delayed_job处理作业时,一切都很正常,直到活动记录尝试通过drb服务器与ferret交谈。
堆栈跟踪在这里:http://pastie.org/693588
无论是通过控制台还是在没有delayed_job的情况下,都可以成功调用相同的进程。我的猜测是,由于某些原因,可能与权限相关,delayed_job没有能力与drb服务器通信,但不确定。知道是怎么回事吗?
发布于 2009-12-01 18:30:08
哇-我在11月5日发布了同样的问题。所以,至少我肯定是在正确的轨道上!:)
DelayedJob with acts_as_ferret in production mode
为了帮助给这个问题提供更多的上下文:-没有我写的特殊代码。所有的模型都有
acts_as_ferret :remote => trueferret_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发布于 2009-11-17 03:21:04
同意评论者的意见,发布一些代码!:-)
然而,从代码的角度来看,很难找出哪里出了问题。DJ如何或为什么与用于用户搜索的drb服务器对话?它正在重新启动它吗?AAF负责对每个请求进行索引,所以如果您在后台处理某些作业,这对数据库中的索引有何影响?
https://stackoverflow.com/questions/1715268
复制相似问题