Я могу запустить работу 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,

Обратите внимание, что если ваша работа занимает некоторое время, рекомендуется запускать ее из фоновой службы, а не прямо в вызове контроллера. Вы можете проверить эту страницу для нескольких рекомендаций о том, как справиться с этим.

Надеюсь, это поможет, дайте мне знать, если это исправит!

Другие вопросы по тегам