2012-06-23 8 views
2

두 개의 다른 레이크 작업을 호출하는 레이크 작업을 생성하려고합니다. 관련 질문이있는 사람들이 herehere이지만 매우 유용하지는 않습니다. 이것은 내가 지금까지 함께 수립 한 것입니다. 내가 뭘 잘못하고 있는거야?레일 앱 레이크 작업이 다른 레이크 작업을 빌드하는 방법을 모릅니다.

당신이 볼 수 있듯이
task :cron => :environment do 
    #if Time.now.hour % 2 == 0 
    Rake::Task["robots:update_robots"].reenable 
    Rake::Task["robots:update_robots"].invoke 
    #end 
end 

, 그것은 Heroku가 뭘 의미있어 cron 작업입니다. 하지만 필자는 필자가 필요로하지 않는 것을 주석 처리하여 작동하는지 테스트 할 수 있습니다.

이 오류가 계속 :

Don't know how to build task 'robots:update_robots'

을하지만 난 왜 아무 생각이 없습니다.

업데이트 : 그래서 나는 cron rake 작업에서 호출되었던 원래 작업을 실행할 수 없었습니다. 나는 그것을 잠시 동안 실행하고, 어딘가에 줄을 사고, 나는 "업데이트"에서 "d"를 지웠다. 그래서이 명령 Rake :: Task [ "robots : upate_robots"] 실행 은 로봇 레이크 작업이 "업데이트"가 아니라 "업"이기 때문에 실행되지 않았습니다.

Tl; dr : 오타. 일반적으로

답변

3

, 솔루션 작동합니다 :

그것은이다 :

require 'rake' 

task :environment do 
    puts 'task environment' 
end 

namespace :robots do 
    task :update_robots do 
    puts "task robots:update_robots" 
    end 
end 

task cron: :environment do 
    puts 'task cron' 
    Rake::Task['robots:update_robots'].reenable 
    Rake::Task['robots:update_robots'].invoke 
end 

Rake::Task['robots:update_robots'].invoke 
Rake::Task[:cron].invoke 

# >> robots:update_robots was invoked 
# >> task robots:update_robots 
# >> task environment 
# >> task cron 
# >> task robots:update_robots 

내 첫번째 생각은 당신이 레이크 작업 잘못이 있어야한다는 것입니다 ("update_robots 로봇"? 그것의 확인 당신에게 있습니다) 나에게 당신이 그것을 다시 가능하게해야한다는 것은 드문 일이다. 이것은 당신이 원하는 것이 레이크가 아니라 단순한 오래된 루비라는 것을 의미한다. update_robots 태스크의 내용을 메소드와 같은 태스크를 처리하는 대신 직접 호출 할 수있는 메소드로 이동하십시오 (태스크는 종속성을 처리하기위한 것이며, 태스크는 한 번만 호출하기 때문에 주위를 구부릴 필요가 있습니다. 작업에 잘못된 도구를 사용하는 경우). 그런 다음 코드와 로봇 모두이에 대한

require 'rake' 

def update_robots 
    puts "method update_robots" 
end 

task :environment do 
    puts 'task environment' 
end 

namespace :robots do 
    task :update_robots do 
    update_robots 
    puts "task robots:update_robots" 
    end 
end 

task cron: :environment do 
    puts 'task cron' 
    update_robots 
end 

Rake::Task['robots:update_robots'].invoke 
Rake::Task[:cron].invoke 

# >> method update_robots 
# >> task robots:update_robots 
# >> task environment 
# >> task cron 
# >> method update_robots 
+1

+ 1 : update_robots는 같은 방법으로 호출 할 수있는 '레이크'를 요구 - 자습서 중 어느 것도 그 언급하지 않습니다. 네가 아는가? :) – Will

관련 문제