Ruby on rails 如何在Rails4上实现cron作业之类的东西
我正在Rails 4中开发一个应用程序,但不确定如何实现某个功能:基本上我需要实现某种cron任务。例如,假设我在我的应用程序中创建了一张发票。我需要应用程序检查发票到期日期,并向客户发送发票尚未付款的提醒。我想在没有用户任何输入的情况下实现这一点 我怎样才能做到这一点 我一直在考虑这一点,并考虑使用这样的工具,它会检查数据库每隔一段时间 但是,还有别的办法吗?要更有效的吗 谢谢 编辑:我试图避免的低效率: 我设想的工作方式是:Ruby on rails 如何在Rails4上实现cron作业之类的东西,ruby-on-rails,cron,recurring-billing,Ruby On Rails,Cron,Recurring Billing,我正在Rails 4中开发一个应用程序,但不确定如何实现某个功能:基本上我需要实现某种cron任务。例如,假设我在我的应用程序中创建了一张发票。我需要应用程序检查发票到期日期,并向客户发送发票尚未付款的提醒。我想在没有用户任何输入的情况下实现这一点 我怎样才能做到这一点 我一直在考虑这一点,并考虑使用这样的工具,它会检查数据库每隔一段时间 但是,还有别的办法吗?要更有效的吗 谢谢 编辑:我试图避免的低效率: 我设想的工作方式是: 将创建一个发票。已选择到期日。此日期自动添加到集合中(我使用的是
- 将创建一个发票。已选择到期日。此日期自动添加到集合中(我使用的是Mongoid,但可能与表相同)
- 每天,无论何时(the)或cron作业将启动脚本/方法/函数,该脚本/方法/函数将检查上述集合中的条目。如果找到到期日在某个时间范围内的条目(例如,到期日在3天内),则会启动另一个脚本/方法,通知客户发票即将到期李>
我担心的是,如果有数千张发票,那么检查所有条目并检查它们是否在特定的时间范围内可能会占用大量资源。那么,有更好的解决方案吗?作为cron的替代方案,您可以将此gem用于延迟的作业: Sidekiq也有定期工作(尽管它只出现在Sidekiq pro中):
作为cron的替代方案,您可以将此gem用于延迟作业: Sidekiq也有定期工作(尽管它只出现在Sidekiq pro中):
如果要在Heroku上部署,可以使用。我已经将其用于各种任务,如备份、分析、计数等
对于rails应用程序,您可以创建一个rake任务来运行特定命令,然后使用调度程序定期运行rake任务。如果您在Heroku上部署,可以使用。我已经将其用于各种任务,如备份、分析、计数等
对于rails应用程序,您可以创建一个rake任务来运行特定命令,然后使用调度程序定期运行rake任务。我将作业定义为一个正常的控制器操作,并设置一个路由。 使用
render json:@records
I返回更新记录的列表。
(此外,我还必须通过更改应用程序_controller.rb中的before过滤器来避免正常必要的登录)
我可以在浏览器中测试它
我尝试了对已定义路线的wget
(或curl)查询
并将其放置在用户crontab中(crontab-e
)
我选择这个解决方案,因为我不想使用额外的gems或启动rails runner任务,因为它在启动时非常慢,并且会消耗大量内存。我将作业定义为一个正常的控制器操作,并设置了一个路径。 使用
render json:@records
I返回更新记录的列表。
(此外,我还必须通过更改应用程序_controller.rb中的before过滤器来避免正常必要的登录)
我可以在浏览器中测试它
我尝试了对已定义路线的wget
(或curl)查询
并将其放置在用户crontab中(crontab-e
)
我之所以选择这个解决方案,是因为我不想使用额外的gems或启动rails runner任务,因为它在启动时非常慢,而且会消耗大量内存。您将不得不使用CRON,因为它是操作系统级的实现。CRON只是触发一个脚本,在您的例子中是一个Ruby scriptLook for
where
gem。如果您使用的是sidekiq,那么您可以使用问题中链接的where gem?关于对cron运行Rails代码,了解cron的低效之处/无论您试图避免什么情况,这将是一个有趣且有用的答案?最主要的一个问题是,可能需要启动整个rails环境来完成一些简单的工作,但可能还有其他一些事情需要避免。您将不得不使用CRON,因为它是一个操作系统级的实现。CRON只是触发一个脚本,在您的例子中是一个Ruby scriptLook forwhere
gem。如果您使用的是sidekiq,那么您可以使用问题中链接的where gem?关于对cron运行Rails代码,了解cron的低效之处/无论您试图避免什么情况,这将是一个有趣且有用的答案?最主要的一点是,可能需要启动整个rails环境来做一些简单的事情,但可能还有其他一些事情您正试图避免。我没有使用Heroku。我没有使用Heroku。