2017-04-22 17 views
0

私は時計宝石を使用しています。毎日真夜中にすべてのコメントをcommentsテーブルから自動的に削除したいと思います。それは開発ENVにになって生産時に時計作業スクリプトを実行する方法

このapp/clock.rbスクリプトが動作している:

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と私のローカル端末上で実行しているとき。

私はアプリを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

あなたはrakeタスクを作成して

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

rakeタスクフォームclock.rbを呼び出すことができます。

のlib /タスク/ comment.rake努力のため

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

お返事ありがとうございます。 'every'メソッドが' module Clockwork'で囲まれていないとき、 'NoMethodError'を取得します。囲まれたとき、' clockwork app/clock.rb'を実行している間、私は '初期化されていない定数Clockwork :: Rake'を取得します。私は上記のように3つすべてを要求します。あなたが示唆するように、dev.envで(端末で 'clockwork'を実行しないで)何も起こっていません。 rakeタスクを実行する(私は 'rake -T'を持っています)、dev.envの端末から' clockwork'を実行する必要があります。デベロッパー私のコードは動作しています。問題は、実稼働環境で稼動させる方法です。何か不足していますか? – ToTenMilan

0

感謝。結局のところ、私はrakeの仕事によって、そしてclockwork gemなしでこれを管理しました。 rakeタスクを作成してherokuにデプロイし、heroku scheduler addonを実行しました。今はバックグラウンドジョブとして実行しています。

関連する問題