【问题标题】:How to run clockwork script in production如何在生产中运行发条脚本
【发布时间】:2017-09-19 12:35:29
【问题描述】:

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

这个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

它退出提示并且cmets仍然存在(假设at:哈希中的值已通过)。

这是我的第一个个人项目。 我的问题是如何让这个脚本在生产中不间断地运行以在每天午夜自动删除 cmets?

更一般:
如何在生产中不间断地运行脚本。

我读了this SO topic,但答案不是很透彻,上面的第一个链接也不是,初学者可以理解。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      耙任务:

      lib/tasks/comment.rake

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

      【讨论】:

      • 感谢您的回复。当every 方法未包含在module Clockwork 中时,我得到NoMethodError,当包含时,我在运行clockwork app/clock.rb 时得到uninitialized constant Clockwork::Rake。我require 以上三个。按照您的建议在 dev.env 中进行操作(没有在终端中运行 clockwork) - 什么也没有发生。执行 rake 任务(我在 rake -T 中有它)我仍然需要从 dev.env 中的终端运行 clockwork。在开发中。我的代码正在运行。问题是,如何让它在生产中运行。我错过了什么吗?
      猜你喜欢
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多