我可以在rails服务中运行Kiba工作吗?

时间:2018-01-25 05:42:01

标签: ruby-on-rails ruby kiba-etl

我从在控制器内部调用的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>

1 个答案:

答案 0 :(得分: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)

为清楚起见,我还建议您将job重命名为job_config

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

希望这会有所帮助,请告诉我这是否可以解决问题!