2014-12-11 3 views
3

Ruby on Rails가 아닌이 작은 루비 애플리케이션이 있습니다.Ruby 앱과 Resque : 작업자를 시작할 수 없습니다.

나는 지침을 따라 갔다. 나는 물건을 대기열에두고 모든 것이 정확하게 resque-web을 사용하여 대기하고 있음을 볼 수있다.

그러나 작업자를 시작하는 데 문제가 있습니다. 문서에 따르면 bin/resque work을 실행하여 작업자를 시작할 수 있습니다.

이렇게하면 사람들이 같은 문제가 인터넷에 어디서나 메시지를 -bash: bin/resque: No such file or directory

을 유발하지만, 레일 응용 프로그램에 대한 순수하지 루비. 그 해결책은 제가 가지고 있지 않은 레이크 파일에 뭔가를 포함하는 것 같습니다.

작업자를 어떻게 시작할 수 있습니까? 고마워요!

답변

6

문제를 해결하는 열쇠는 갈퀴입니다.

Resque에는 세 가지 레이크 작업이 포함됩니다. 레이크 파일을 사용하려면 'resque/tasks'이 필요합니다. 당신이 명령의 목록은 레이크을 물어 보면 당신이 Resque에 포함 된 세 가지 작업을 볼 수 있습니다 :

rake resque:failures:sort # Sort the 'failed' queue for the redis_multi_queue failure backend 
rake resque:work   # Start a Resque worker 
rake resque:workers  # Start multiple Resque workers 

당신이 찾고있는 사람이 (하나의 작업자를 시작하는) resque:work입니다. QUEUE 환경 변수를 사용하여 대기 할 대기열을 지정합니다. 따라서 작업자를 시작하는 것은 다음과 같습니다.

QUEUE=your_queue_name rake resque:work.

또는 QUEUES=*을 사용하여 모든 대기열을들을 수 있습니다.

편집 :

다음은 좀 더 완벽한 예입니다. rakefile라는 파일을 만듭니다

require 'resque/tasks' 
require 'resque' 

class Worker 
    @queue = :default 

    def self.perform(my_arg) 
    puts my_arg 
    end 
end 

task :hello do 
    Resque.enqueue(Worker, 'hello') 
end 

그러던 어느 터미널 유형 TERM_CHILD=1 QUEUE=default rake resque:work인치 그러면 기본값 인이라는 대기열을 보면서 작업자가 시작됩니다. 작업이 perform 클래스 메소드로 전달하는 인수를 출력합니다.

두 번째 터미널 유형은 rake hello입니다. 이렇게하면 클래스의 작업을 대기열에 추가하고 hello 문자열을 전달합니다 (Worker 클래스의 메소드로 전달됨). Worker에있는 @queue 속성을보고 default 대기열로 푸시하는 것을 알고 있습니다.

작업자를 시작한 터미널에 hello이 인쇄되어 있습니다.

이 예제는 유용하지 않으며, 모든 것을 rakefile에 넣지는 않겠지 만, 수정을 시작하고 자신 만의 빌드를 시작하는 것이 좋은 출발점이라고 생각합니다.

+1

감사합니다. @wkjagt. 그것은 당신이 나의 문제를 언급하고 해결했던 것과 똑같이 일했습니다. – henritroyat

+0

사람들이'rake resque : work TERM_CHILD = 1 QUEUE = default' 일 때'TERM_CHILD = 1 QUEUE = 기본 갈퀴 다시 만들다 : work'라고 입력하는 이유는 무엇입니까? 이것은 오래된 구문입니까?문서가'rake resque : work' 이후에 인수의 순서를 뒤집어서 앞에 놓기 때문에 나는이 작업에 어려움을 겪었습니다. –