2015-01-27 5 views
0

Ruby on Rails와 Heroku를 사용하고 있습니다.한 번만 rake 작업을 실행하는 방법

나는 rake db : migrate와 같은 것을 원합니다. 이전에 실행되지 않은 부분 만 실행합니다.

다른 레이크 작업을 실행할 수있는 레이크 작업을 설정할 수는 있지만 이전에 실행되지 않은 작업 만 실행하는 중입니까?

레이크 작업을 자동으로 실행하려면 어떻게해야합니까?

+1

'레이크 DB : 마지막 마이그레이션 실행의 타임 스탬프를 저장하는 데이터베이스 테이블을 확인 migrate'. 당신은 아마도 그런 식으로 구현해야 할 것입니다. – ptd

+0

네, db와 같은 무언가가 필요합니다 : 마이 그 레이션,하지만 내 레이크 작업은 데이터베이스만으로 제한되지 않으므로 관계에 대한 데이터베이스를 확인하지 않습니다. – sonnyhe2002

+0

아니요, 레일이이 정보와 체크를 저장하는 특수 데이터베이스 테이블을 만듭니다. 그 레이크 작업을 실행할 때. 이 목적을 위해 테이블을 만들고 거기에서 실행 한 작업을 저장하는 것이 좋습니다. – ptd

답변

0

처음으로, rake 태스크를 두 번 실행합니다. 즉, rake db:migrate은 이미 존재하는 경우 데이터베이스 컬럼을 복제하거나 겹쳐 쓰지 않습니다.

예를 들어 어디에서나 레일 앱을 배포하는 데 사용되는 capistrano는 앱을 배포 할 때마다 db:migrate 또는 assets:precompile과 같은 작업을 다시 실행합니다. 그래서 걱정할 필요가 없습니다.

작업을 자동으로 실행하려면 cron 작업과 같은 것이 필요할 것입니다. Whenever은 훌륭한 루비 보석으로 사랑하는 루비 구문을 사용하여 이와 같은 작업을 설치할 수 있습니다.

every :sunday, :at => '12pm' do 
    rake my:awesome:task 
end 

Github의 페이지뿐만 아니라 기본 scheduler.rb 유용한 많은에게 길게

보석을 설치하고 레일 응용 프로그램의 루트에 wheneverize .를 실행 한 후, 당신은 뭔가를 scheduler.rb을 편집하고 추가 할 수 있습니다 이러한 작업이 어떻게 구축되는지에 대한 예.

whenever --update-crontab 당신은 당신이 그들을 원할 때 당신의 작업을 주기적으로 실행할 crontab에 rubyesque cronjob을 쓸 수 있습니다. 하나

** 편집

여러 작업 :

task :setup => [:a, :b, :c] 
task :a do 
    %x(bash command) 
end 
task :b do 
    rake db:migrate 
end 
task :c do 
    rake whatever 
end 
+0

스케줄러를 실행할 계획이지만 문제는 이전 스케줄에서 'a'태스크를 실행했기 때문에 해당 스케줄러가 'b'태스크와 'c'태스크를 실행하는 방법을 알 수 있습니까? – sonnyhe2002

+0

스케줄러 자체는 그리 똑똑하지 않습니다. 그래서 당신이 어떤 불쾌한 조건을 사용하지 않는다면, 당신은 이것을 달성하지 못할 수도 있습니다. 어떤 작업을 실행해야하는지 알 수 있어야합니다. 여러 작업을 생성하면 어떤 시간에 어떤 작업이 실행되고 있는지 완벽하게 제어 할 수 있습니다. –

+0

최종 목표는 릴리스 팀에 푸시를 위임하는 것이며, 생성되는 레이크 작업이나 새 테이블에 대해 알 필요가 없습니다. 스크립트를 클릭하기 만하면됩니다. – sonnyhe2002

관련 문제