我从在控制器内部调用的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>
答案 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以获取有关如何处理此问题的一些建议。
希望这会有所帮助,请告诉我这是否可以解决问题!