【问题标题】:How to set up Scheduler add-on at Heroku如何在 Heroku 设置调度程序插件
【发布时间】:2011-12-31 09:52:15
【问题描述】:

我习惯用PHP在URL地址上设置CRON,我想在一个时间间隔内自动运行。

现在我尝试在 Heroku 设置 Schedular add-on,但我遇到了一个小问题 - 我创建了文件 lib/tasks/scheduler.rake,并在 Heroku 的管理部分设置了所有可能的设置,但是:

我有点困惑,这一切是如何运作的——例如,这些行在lib/tasks/scheduler.rake

desc "This task is called by the Heroku scheduler add-on"
task :update_feed => :environment do
    puts "Updating feed..."
    NewsFeed.update
    puts "done."
end

task :send_reminders => :environment do
    User.send_reminders
end

任务task :update_feed是什么意思?在设置的时候会运行这个动作吗?但这是哪个控制器的动作?例如,如果我需要每天在控制器home 中运行动作my_action 怎么办?我应该只在那里重新设置my_action 而不是update_feed

【问题讨论】:

    标签: ruby-on-rails-3 heroku cron scheduler


    【解决方案1】:

    使用 cron 来调用 http 操作,例如使用 curl 或 wget,您正在安排一个 http 请求,然后该 http 请求会导致 php 操作运行,并且在该操作的代码中,您有一些工作/逻辑发生。

    使用 heroku 调度程序,您将跳过所有 http 请求内容和操作内容,并且可以将逻辑/工作直接放入 rake 任务中(或将其放入常规 ruby​​ 类或模型中并从任务主体中调用) .

    这是有效的,因为 rake 任务正在加载完整的 rails 环境(任务定义的 :environment 依赖部分执行此操作),因此在 rake 任务主体内,您可以访问您的 rails 应用程序模型、所需的 gem、应用程序配置,一切 - 就像在 Rails 中的控制器或模型类中一样。

    如果您在 cedar 上,还有什么好处是调度程序在一次性 dynamo 实例中调用任务,因此您的应用程序的主要 dynamo 不会被调度程序运行的任务占用,当您使用 cron -> http 请求 -> 控制器操作模式。

    如果你告诉我更多关于你想要做什么的信息,我可以给出更具体的建议,但一般来说,我通常将任务的逻辑定义在 lib 目录中的普通 ruby​​ 类中,或者作为类方法模型,这就是从任务主体中调用的内容(如您上面引用的示例代码)。

    【讨论】:

    • 感谢您的回复,安德鲁。我有一个问题 - 我怎样才能每月只运行一次任务?在 Schedular 的菜单中只有选项每天每小时10分钟
    • 每天调用它,然后在任务中检查当天,如果是第一次(或其他)运行,则返回。
    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 2012-05-03
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多