2

我正在从控制器内部调用的 rails 服务运行 kiba 作业。这是当前代码。

class KibaRunner
  attr_reader :job,:logger
  def initialize(job)
    @job = job
    @logger = Rails.logger
  end
  def run
    logger.info "Running job"
    Kiba.run(kiba_job)
    true
  rescue => ex
    logger.warn ex
    false
  end

  def kiba_job
    Kiba.parse do
      source job.source.class_name, job.source.config
      destination  job.destination.class_name, job.destination.config
    end
  end
end

这就是我得到的

NoMethodError: undefined method `job' for #<Kiba::Context:0x00555bcd400e38>
4

1 回答 1

1

Kiba作者在这里!快速回答——带有更多行和错误号的稍长的堆栈跟踪会有所帮助,但我怀疑这是因为Kiba.parse评估系统无法访问顶级方法。

我建议您将其job作为方法参数传递,以确保在parse调用中可以看到它:

def kiba_job(job)
  Kiba.parse do
    source job.source.class_name, job.source.config
    destination  job.destination.class_name, job.destination.config
  end
end

然后更新您的服务调用以使用它:

kiba_job(job)

为了清楚起见,我还建议您可以将您的重命名jobjob_config.

请注意,如果您的作业需要一些时间,最好从后台作业服务运行它,而不是直接在控制器调用中运行。您可以查看此页面以获取有关如何处理此问题的一些建议。

希望这会有所帮助,让我知道这是否解决了它!

于 2018-01-25T06:51:10.353 回答