【问题标题】:DelayedJob with acts_as_ferret in production mode在生产模式下使用acts_as_ferret 的DelayedJob
【发布时间】:2010-10-02 14:59:58
【问题描述】:

当我通过 DelayedJob 运行任务时出现以下错误:

closed stream
/usr/lib/ruby/1.8/drb/drb.rb:961:in `select'
/usr/lib/ruby/1.8/drb/drb.rb:961:in `alive?'
/usr/lib/ruby/1.8/drb/drb.rb:1211:in `alive?'
/usr/lib/ruby/1.8/drb/drb.rb:1168:in `open'
/usr/lib/ruby/1.8/drb/drb.rb:1166:in `each'
/usr/lib/ruby/1.8/drb/drb.rb:1166:in `open'
/usr/lib/ruby/1.8/drb/drb.rb:1163:in `synchronize'
/usr/lib/ruby/1.8/drb/drb.rb:1163:in `open'
/usr/lib/ruby/1.8/drb/drb.rb:1092:in `method_missing'
/usr/lib/ruby/1.8/drb/drb.rb:1110:in `with_friend'
/usr/lib/ruby/1.8/drb/drb.rb:1091:in `method_missing'
/usr/lib/ruby/gems/1.8/gems/acts_as_ferret-0.4.3/lib/remote_index.rb:31:in `<<'
/usr/lib/ruby/gems/1.8/gems/acts_as_ferret-0.4.3/lib/instance_methods.rb:90:in `ferret_update'
...

从错误中可以明显看出delayed_job 找不到ferret_server。但是,当我在生产模式下从控制台运行此 SAME 任务时,它工作正常。我如何确保延迟作业有任何想法:

  1. 真正加载了生产环境。我在 script/delayed_job 中设置了 RAILS['ENV]] = 'production' 以确保这一点。 (我想这应该不错)

  2. 通过模型配置了雪貂?

【问题讨论】:

    标签: ruby-on-rails delayed-job ferret acts-as-ferret


    【解决方案1】:

    这也发生在我身上。您需要在延迟作业运行期间禁用 ferret 索引。

    在您的工作者定义中(类似于 RAILS_ROOT/lib/worker.rb),并给定一个名为 Post 的模型,您应该包含如下一行:

    class Worker < Struct.new(:stuff)
      def perform
        Post.disable_ferret
        <do some stuff>
        .
        .
        .
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2021-12-04
      • 2020-01-24
      相关资源
      最近更新 更多