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

can I run Kiba job inside rails service?

Iam 运行 来自控制器内部调用的 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>

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

我建议您将 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

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

希望这对您有所帮助,如果解决了问题请告诉我!