복붙노트

[RUBY-ON-RAILS] 컨트롤러에서 실행 레이크 작업

RUBY-ON-RAILS

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

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

해결법

  1. ==============================

    1.나는 ddfreynee에 동의하지만, 경우에 당신은 당신이 코드를 같이 볼 수 필요한 게 뭔지 알아요 :

    나는 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
    

    대신 이니셜 라이저에서 '레이크'와 .load_tasks을 요구할 수 있습니다.

  2. ==============================

    2.나는 그것을 코드에서 레이크 작업을 호출하기 좋은 스타일을 찾을 수 없습니다. 난 당신이 레이크 작업 이외의 곳, 실행 및 레이크 작업 호출이 코드가하려는 작업에 대한 코드를 넣는 것이 좋습니다.

    나는 그것을 코드에서 레이크 작업을 호출하기 좋은 스타일을 찾을 수 없습니다. 난 당신이 레이크 작업 이외의 곳, 실행 및 레이크 작업 호출이 코드가하려는 작업에 대한 코드를 넣는 것이 좋습니다.

    이것은 (당신이 원하는 무엇을하는) 외부 레이크를 호출 쉽다는 장점이 있습니다뿐만 아니라, 그것은 또한 훨씬 쉽게 레이크 작업을 테스트 할 수 있습니다.

  3. ==============================

    3.대신 컨트롤러에서 레이크 작업을 호출하려고, 당신이 실행하려는 어떤 논리가 포함 된 서비스 객체를 호출합니다.

    대신 컨트롤러에서 레이크 작업을 호출하려고, 당신이 실행하려는 어떤 논리가 포함 된 서비스 객체를 호출합니다.

    class SomeController < ApplicationController
      def whatever
        SomeServiceObject.call
      end
    end
    

    ... 그리고, 사용자 정의 레이크 작업에 대해 얘기하는 가정이 아니라 서비스 개체를 호출 있습니다 :

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

    혹시 서비스 객체에 익숙하지 않은, 그들은 특정 작업을 수행 그냥 평범한 오래된 루비 클래스입니다. 기본 레이크 작업 중 일부를 호출하려는 경우 (즉 : DB : 마이그레이션) 내가보기 엔 컨트롤러에서 그런 종류의 일을하지 않는 것이 좋습니다 것입니다.

  4. ==============================

    4.당신은 당신의 컨트롤러에서이 작업을 수행 할 수 있습니다 :

    당신은 당신의 컨트롤러에서이 작업을 수행 할 수 있습니다 :

    %x[rake name_task]
    

    로 : name_task 당신의 작업의 이름입니다

  5. from https://stackoverflow.com/questions/1170148/run-rake-task-in-controller by cc-by-sa and MIT license