2

私はdelayed_jobいくつかのファイルを処理し、結果でいくつかのアクティブレコードオブジェクトを作成するために使用しています。acts_as_ferretdrb サーバーとして実行されているアクティブ レコード オブジェクトのインデックスが作成されています。が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

レコードを変更せずにデータを収集する他の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-12-01T10:30:08.157 に答える
0

コメント投稿者に同意し、コードを投稿してください!:-)

ただし、コードがない場合、何が悪かったのかを理解するのは非常に困難です。そして、DJはユーザー検索に使用されるdrbサーバーとどのようにまたはなぜ通信しているのでしょうか?再起動しますか?AAFは各リクエストのインデックス作成を処理するので、バックグラウンドでジョブを処理している場合、それはデータベースのインデックスにどのように影響しますか?

于 2009-11-16T19:21:04.247 に答える