让rufus-scheduler在Heroku

时间:2016-03-01 18:55:58

标签: ruby-on-rails email heroku rufus-scheduler

我想使用Rufus-Scheduler每天发送邮件。 我严格遵循GitHub here上给出的说明(该片段,使用瘦服务器等);但nothnig发生了(没有发送邮件)我根据Heroku日志找不到原因

我的代码

# config/initializers/scheduler.rb

require 'rufus-scheduler'


s = Rufus::Scheduler.singleton


# Here goes my mailing code (already tested and works well)

s.every '1d' do

Rails.logger.info "hello, it's #{Time.now}"
Rails.logger.flush
end

为了让rufus-schedul工作,GitHub上还没有其他一些要点吗?非常感谢

2 个答案:

答案 0 :(得分:2)

(免责声明,我不是Heroku专家,但我可以通过google方式阅读文档)。

所以,这不是你的第一个Heroku - rufus-scheduler问题...(Rails_using Rufus in order to schedule sending mails daily

你说“为了每天发邮件”,你为什么不使用Heroku调度程序插件? https://devcenter.heroku.com/articles/scheduler它可以每天甚至每小时安排一次(具有讽刺意味的是,它可能会错过一个时间表,因此他们建议使用下面的“自定义时钟过程”)。

你知道你的dyno可能会在时间表到来时睡着吗? Heroku在一段时间不活动后让dynos“睡觉”。

Heroku建议使用“自定义时钟进程”:https://devcenter.heroku.com/articles/scheduled-jobs-custom-clock-processes#custom-clock-processes

您必须了解您的目标平台Heroku,并使用或不使用rufus-scheduler使您的系统适应它。

作为旁注,你之前的帖子提到了Passenger,这很难调整到不能杀死rufus-scheduler的帖子,但是这不会在Heroku上发挥重要作用,你的dyno不应该永远存在, rufus-scheduler不能超过其webapp的dyno,因此是“自定义时钟进程”的推荐。

答案 1 :(得分:2)

你可以做到这一点,但你必须了解爱好dynos是如何工作的。每个免费帐户is allocated hours like this

  

每个月的帐户都有550小时的基础,您的免费dynos可以运行。除了这些基本时间之外,使用信用卡验证的帐户还将获得额外450小时的免费dyno配额。

因为rufus-scheduler在你的ruby应用程序进程中作为线程运行(这就是为什么它在你运行rails console时开始运行),只要你的服务器(我使用puma)运行,rufus调度程序就会运行得很好。

缺点是如果你在你的服务器上运行两个进程,比如你用3-4个工作符运行puma,那么你将同时运行3-4个调度程序,使它执行你的计划事件一式三份/一式四份,所以请记住这一点。

所以步骤很简单   - 确保你有足够的时间连续整个月运行你的dyno   - 使用像pingdom这样的服务,每隔几分钟ping你的应用程序以保持dyno活跃,以便Heroku在30分钟不活动后不会将其旋转(这样做可以释放dynos)   - 这应该就是你需要做的一切

请记住,要运行一个月的dyno,您需要大约745个小时,这是您的主要分配(当您添加信用卡时)。如果由于某种原因你用完了几个小时(比如你在账户上运行两个不同的应用程序并使用我在下面描述的方法)那么这可能发生在你身上

  

当您达到帐户配额的100%时,将发送第二个通知,此时您的应用程序的dynos将在该月的剩余时间内进入休眠状态。因此,在本月的剩余时间内,任何使用免费dynos的应用都无法访问。

当你可以使用heroku调度程序安排像其他人一样的rake任务时,似乎很麻烦。