program story

컨트롤러에서 레이크 작업 실행

inputbox 2020. 10. 29. 08:06
반응형

컨트롤러에서 레이크 작업 실행


컨트롤러에서 레이크 작업을 실행하고 싶습니다. 이것을 할 방법이 있습니까?


나는 ddfreynee에 동의하지만 코드가 필요한 것을 알고 있다면 다음과 같이 보일 수 있습니다.

require 'rake'

Rake::Task.clear # necessary to avoid tasks being loaded several times in dev mode
Sample::Application.load_tasks # providing your application name is 'sample'

class RakeController < ApplicationController

  def run
    Rake::Task[params[:task]].reenable # in case you're going to invoke the same task second time.
    Rake::Task[params[:task]].invoke
  end

end

대신 이니셜 라이저에서 'rake'및 .load_tasks를 요구할 수 있습니다.


코드에서 레이크 작업을 호출하는 것이 좋은 스타일을 찾지 못했습니다. 레이크 태스크 외부 어딘가에 실행하려는 태스크에 대한 코드를 넣고 레이크 태스크가이 코드를 호출하도록하는 것이 좋습니다.

이것은 외부 레이크 (원하는 것)를 호출하기 쉽다는 장점이있을뿐만 아니라 레이크 작업을 훨씬 쉽게 테스트 할 수 있도록합니다.


컨트롤러에서이 작업을 수행 할 수 있습니다.

%x[rake name_task]

with : name_task작업의 이름입니다.


컨트롤러에서 레이크 태스크를 호출하는 대신 실행하려는 로직이 포함 된 서비스 객체를 호출하십시오.

class SomeController < ApplicationController
  def whatever
    SomeServiceObject.call
  end
end

... 사용자 정의 레이크 작업에 대해 이야기하고 있다고 가정하고 서비스 객체도 호출하도록합니다.

namespace :example do
  desc 'important task'
  task :important_task do
    SomeServiceObject.call
  end
end

서비스 객체에 익숙하지 않은 경우 특정 작업을 수행하는 평범한 오래된 루비 클래스입니다. 기본 레이크 작업 (예 : db : migrate)을 호출하려는 경우 컨트롤러에서 그런 종류의 작업을 수행하지 않는 것이 좋습니다.

참고 URL : https://stackoverflow.com/questions/1170148/run-rake-task-in-controller

반응형