1

我正在构建一个应用程序,它会定期向用户发送状态请求(通过电子邮件&短信)。我想执行这将每个小时的服务:(基于某种逻辑)关于如何在Rails 3中编写服务的建议

  • 查询数据库中需要发送的所有请求
  • 发送通过亚马逊的简单电子邮件服务的要求(这已经工作)
  • 写状态请求通知的记录回数据存储

我正在考虑这一系列的操作结束了与终点的单控制器,可以远程调用揭开序幕的过程在rails应用程序中。从长远来看,我会把这个过程分解成一个可以独立于我的Rails应用程序运行的应用程序,但现在我只是试图保持简单。

我的第一倾斜是建立以下内容:用下列元素

  • 控制器:
    • 这将协调上面概述的步骤(和可以在外部调用)的方法
    • 的呼叫到status_request模型,它将带回需要发送的请求集合
    • 循环遍历待处理的请求,它将:
    • 让我的AWS简单的电子邮件服务模块的调用实际发送电子邮件,并
    • 请对status_request模型调用登录请求回数据库
  • 型号:
    • 一我status_request模型方法,会带回那些需要请求集合发送
    • 的方法,我status_request模型,它会记录寄通知

由于这将作为一个服务,从外部调度程序定期调用,我不认为我需要一个视图来执行此操作。 (当然,会需要视图来向用户和管理员显示发送了什么请求,但是后来......)。

作为Rails的新手,我要求回顾一下这种方法以及您可能有的任何建议。

谢谢!

回答

1

而不是Jeff指出的控制器暴露了安全风险,您可能只想公开一个rake任务并使用cron来每小时调用一次。

如果您仍然对构建控制器感兴趣,请查看devise gem及其单个访问令牌token_authenticatable,以确保您公开的方法的安全。

您可能还想查看delayed_job或resque以将调用卸载到status_request,并将该循环转换为AWS简单服务的后台工作进程。

您可能需要一个单独的控制器并查看日志文件,以便您可以按需查看进度。

如果你想获得真正看中的使用Amazon SNS向您发送警报,当服务达到失败的一些不可接受的程度,积压等

+0

在这里做了一些关于delayed_job的阅读:https://github.com/collectiveidea/delayed_job。伟大的宝石! – jn29098

1

由于您试图从外部进程调用此方法,因此您的方法应该可行。你也可以有一个工作进程,当他们在那里时处理任务。

您将需要路由来公开您的服务,并且您可能还需要做出安全决策。调用应用程序的服务将如何进行身份验证,以便所有其他人无法按照要求进行身份验证?

另一个考虑因素应该是您要发送多少封电子邮件。如果有足够的空间,我们可能想研究一下这样一个事实:编写这种循环将会非常重要;如果它是一个Web应用程序,可能会影响当前系统上的用户。

最后,有很多方法可以做到这一点。我会专注于您期望的性能/使用以及安全性。从来没有一个完美的方式来解决这样的问题,你的方式应该知道它需要在其内部运行的变量。

+0

谢谢,杰夫。关于确保终点的重要一点。需要成为一个服务器位于网络服务器的地方,我想确保我可以稍后分解出来,我很感谢你的回答, – jn29098

0

ResqueRedis可能会对你有所帮助的调度和执行化经营他们是简单而超快的,[http://railscasts.com/episodes/271-resque]就是一个简单的啧啧,

相关问题