2017-04-22 36 views
0

我正在使用發條寶石。我想每天在午夜自動刪除comments表中的所有評論。如何在生產中運行發條腳本

app/clock.rb腳本工作,因爲當它在我的本地終端上運行與$ clockwork app/clock.rb發展ENV應該:

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

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

因此,我將應用程序部署到了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任務,並調用形式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'方法沒有被封裝在'module Clockwork'中時,我得到'NoMethodError',當它被封閉時,我會在運行'clockwork app/clock.rb'的時候得到'未初始化的常量Clockwork :: Rake'。我需要所有三個如上。按照你的建議和dev.env(不在終端中運行'clockwork') - 沒有任何事情發生。做rake任務(我在'rake -T'中)我仍然需要從dev.env的終端運行'clockwork'。在開發中。我的代碼正在工作。問題是,如何讓它在生產中運行。我錯過了什麼嗎? – ToTenMilan

0

感謝努力。畢竟,我通過耙子任務來管理這件事,並且沒有clockwork寶石。 我創建了一個rake任務,將其部署到heroku,並通過heroku scheduler插件運行任務。現在它作爲後臺作業運行。