如何在生产中运行发条脚本

时间:2017-04-22 15:10:52

标签: ruby-on-rails heroku production-environment clockwork

我正在使用发条宝石。我希望每天午夜自动删除comments表中的所有评论。

这个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:哈希中的值已经过去了。)

这是我的第一个个人项目。 我的问题是如何让这个脚本在生产中不间断运行,以便每天午夜自动删除评论? OR
更一般:
如何在生产中运行脚本不间断。

我看了this SO topic,但答案并不是很彻底,上面的第一个链接也没有,初学者要理解。

2 个答案:

答案 0 :(得分:1)

您可以创建rake任务并调用表单clock.rb

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

rake任务:

的lib /任务/ comment.rake

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

答案 1 :(得分:0)

感谢您的努力。毕竟,我通过rake任务和没有clockwork gem来管理它。 我创建了一个rake任务,将其部署到heroku,并通过heroku scheduler插件运行任务。现在它作为后台工作运行。