ruby - 문법 - 레일즈 자바스크립트




Ruby 스크립트 내에서 Rake 작업을 어떻게 실행합니까? (3)

Rails rails runner script.rb 드 된 스크립트 (예 : rails runner script.rb )

def rake(*tasks)
  tasks.each do |task|
    Rake.application[task].tap(&:invoke).tap(&:reenable)
  end
end

rake('db:migrate', 'cache:clear', 'cache:warmup')

일반적으로 명령 줄에서 호출하는 Rake 작업이있는 Rakefile 이 있습니다.

rake blog:post Title

Rake 작업을 여러 번 호출하는 Ruby 스크립트를 작성하고 싶지만 ''(backticks) 또는 system 사용하여 쉘링하는 것이 유일한 해결책입니다.

이것을하는 올바른 방법은 무엇입니까?


이것은 Rake 버전 10.0.3에서 작동합니다.

require 'rake'
app = Rake.application
app.init
# do this as many times as needed
app.add_import 'some/other/file.rake'
# this loads the Rakefile and other imports
app.load_rakefile

app['sometask'].invoke

knut이 말했듯이 여러 번 호출 reenable 사용 가능을 사용하십시오.


invokereenable 사용하여 태스크를 reenable 실행할 수 있습니다.

호출 rake blog:post Title 예제에 매개 변수가있는 것 같습니다. 이 매개 변수는 invoke 에서 매개 변수로 사용할 수 있습니다.

예:

require 'rake'
task 'mytask', :title do |tsk, args|
  p "called #{tsk} (#{args[:title]})"
end



Rake.application['mytask'].invoke('one')
Rake.application['mytask'].reenable
Rake.application['mytask'].invoke('two')

mytaskblog:post 바꾸고 대신 mytaskrequire 수있는 작업 정의를 바꾸십시오.

이 솔루션은 결과를 stdout에 기록하지만 출력을 억제하고 싶다는 언급은하지 않았습니다.

재미있는 실험 :

작업 정의 reenable 를 호출 할 수 있습니다. 이를 통해 작업을 다시 활성화 할 수 있습니다.

예:

require 'rake'
task 'mytask', :title do |tsk, args|
  p "called #{tsk} (#{args[:title]})"
  tsk.reenable  #<-- HERE
end

Rake.application['mytask'].invoke('one')
Rake.application['mytask'].invoke('two')

결과 (rake 10.4.2로 테스트) :

"called mytask (one)"
"called mytask (two)"






command-line-interface