2017-04-22 8 views
0

시계 사용 보석을 사용 중입니다. 매일 자정에 매일 comments 테이블의 모든 댓글을 삭제하고 싶습니다. 이 개발 ENV에 가정으로 :생산에서 시계 작업 스크립트를 실행하는 방법

require './config/boot' 
require './config/environment' 
require 'clockwork' 

module Clockwork 
    every(1.day, 'delete.comment', at: '00:00') { 
    Comment.destroy_all 
    } 
end 

을가 $ clockwork app/clock.rb 내 로컬 터미널에서 실행중인 경우

app/clock.rb 스크립트는 노력하고 있습니다.

그래서 나는 Heroku에 앱을 배포했습니다.

RAILS_ENV=production rails r app/clock.rb 

as in this SO topic 만 출력은 다음과 같습니다 :

Running via Spring preloader in process 13973 

을하며 프롬프트를 종료하고 댓글 (at: 해시 값이 경과 한 가정) 아직 거기에 나중에 터미널에서, 나는 실행합니다.

이것은 내 첫 번째 프로젝트입니다. 제 질문은이 스크립트를 프로덕션 환경에서 논스톱으로 실행하여 매일 자정에 자동으로 주석을 제거하는 방법입니까?

더 일반적인 :
프로덕션 환경에서 논스톱 스크립트를 실행하는 방법.

나는 this SO topic을 읽었지만 그 답은 매우 철저하지 않으며 위의 첫 번째 링크도 초보자는 이해할 수 없습니다.

답변

1

당신은 폼 clock.rb에게

every(1.day, 'name', at: '09:00') do 
    #Load task 
    Rake::Task['comment:destroy'].invoke 
end 

레이크 작업 레이크 작업을 생성하고 호출 할 수 있습니다

lib 디렉토리/작업/comment.rake 노력

namespace :comment do 
    desc 'Destroy all comment' 
    task destroy: :environment do 
    Comment.destroy_all 
    end 
end 
+0

응답 해 주셔서 감사합니다. 'every' 메쏘드가'모듈 Clockwork'에 포함되어 있지 않을 때'NoMethodError'를 얻습니다. 동봉 될 때'clockwork app/clock.rb'을 실행하는 동안'초기화되지 않은 상수 Clockwork :: Rake'를 얻습니다. 나는 위와 같이 세 가지 모두를 요구한다. 당신이 제안하고 dev.env에서 (터미널에서'clockwork '을 실행하지 않고) - 아무 일도 일어나지 않습니다. 갈퀴 작업 ('rake -T'에 포함되어 있음)을 수행하려면 dev.env의 터미널에서'clockwork'을 실행해야합니다. dev에 내 코드가 작동 중입니다. 문제는 프로덕션 환경에서 실행하는 방법입니다. 내가 놓친 게 있니? – ToTenMilan

0

감사합니다. 결국, 나는 rake task와 clockwork gem없이 이것을 관리했다. rake 작업을 생성하여 heroku에 배포하고 heroku scheduler addon을 통해 작업을 실행했습니다. 이제는 백그라운드 작업으로 실행 중입니다.