2016-12-06 5 views
1

저는 레일스를 처음 사용하고 자정에 한 번 일괄 처리 파일/스케줄 작업을 실행하여 어느 항목이 만료되었는지 확인하려고합니다. 테이블의 모든 레코드는 closing_date를 가지며 그 시간이 지나면 해당 레코드는 비활성 상태 여야합니다 (DB에서는 status active = false). 그래서 기본적으로 2 개의 SQL 쿼리를 실행하여 모든 레코드를 가져온 다음 구식 레코드에 대해 다른 필드를 비활성으로 플래그를 설정합니다. 레일즈 5와 작업 중입니다.Rails 5 스케줄러가 하루에 한 번 데이터베이스를 업데이트합니다.

이 보석에 대해 어떻게해야합니까 (루퍼스, 시계 또는 다른 보석) 또는 cronjob에 대한 간단한 시스템 도구? 내 DB를 PostgreSQL으로 변경하려고합니다. 그렇게 영향을 미칩니 까? 아이디어를 얻기 위해 누구나 공유 할 수있는 제안이나 샘플 코드.

답변

3

요약 : whenever Gem을이 용도로 사용할 수 있습니다.

SQL을 작성할 위치에 대한 레이크 작업을 만들어야합니다. 그런 다음


자세한 설명

첫 번째 단계는 레이크 작업을 생성 될 때마다 사용하여 cron 작업으로 예약합니다. 당신은

을 실행하여 콘솔

rails g task my_namespace my_task1 
이 당신은 당신의 작업이 제대로 실행되고 있는지 여부를 확인할 수 있습니다

namespace :my_namespace do 
    desc "TODO" 
    task task1: :environment do 
    # Your code will go here 
    end 

end 

처럼 초기 내용으로 lib/tasks 폴더에 my_namespace.rake라는 이름의 파일을 만듭니다

를 사용하여이 작업을 수행 할 수 있습니다

rake my_namespace:task1 

콘솔에 있습니다.

이제 whenever 보석을 사용하여 작업을 예약해야합니다.

  1. 실행 bundle install
  2. 실행 wheneverize 명령을 터미널에서 실행하십시오. config 폴더에 schedule.rb 파일이 생성됩니다.
  3. 은 레이크 작업을 예약하려면 다음 코드를 추가하여 :

    every 1.day, at: '8:00 pm' do 
        rake "my_namespace:task1" 
    end 
    
  4. 실행이 명령을 : whenever --update-crontab. 경우 환경 개발, 사용하는 명령은 다음과 같습니다 whenever --update-crontab --set environment='development'은 (this question를 참조

  5. 실행 crontab -l가 크론 작업이 추가되었는지 여부를 확인하기 위해
+0

당신이 자세한 설명을 – abhi110892

+0

예, 제발, 감사를 원하는 경우 알려주세요.. 이 문서에서는 개요 만 제시했기 때문에 SQL 명령이 rake 명령 (또는)에서 작성되는 방법을 묘사하는 관련 예제를 찾지 못했습니다. 또는 배치 파일의 두 명령을 한 번에 실행하십시오. 러너. – Means

+0

나는 대답을 업데이 트했습니다. 제발 알려주십시오. – abhi110892