Я могу запустить работу Kiba внутри службы рельсов?
Я выполняю задание kiba из службы rails, которая вызывается из контроллера. Вот текущий код.
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 ответ
Автор киба тут! Быстрый ответ - немного более длинная трассировка стека с большим количеством строк и номеров ошибок может помочь, но я подозреваю, что это потому, что 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
,
Обратите внимание, что если ваша работа занимает некоторое время, рекомендуется запускать ее из фоновой службы, а не прямо в вызове контроллера. Вы можете проверить эту страницу для нескольких рекомендаций о том, как справиться с этим.
Надеюсь, это поможет, дайте мне знать, если это исправит!