我在哪里放置从 api 到 rails 更新数据库的循环脚本

Where do I put a recurring script that updates database from api in rails

我有一个 Rails 应用程序设置了一个模型帐户,该帐户应该每天早上使用来自外部 API 我正在呼叫(CRM)的数据进行更新。基本上,要么我在我的应用程序中创建我在 CRM 中找到的新帐户以及一些与我的列映射的字段,要么我找到该帐户(如果它已经存在)并更新它。

到目前为止,我一直将此代码放入 seeds.rb 文件中,并从托管该应用程序的 Heroku 中设置一个调度程序,其中包含以下命令:定期运行的 rails db:seed .

我的问题是,我确定有更好的方法可以做到这一点。我读过有关 rake tasks 的内容,但我不太明白它如何适用于我的案例。否则我想把我的方法作为一个 self 方法放在 models/account.rb 文件中。但我真的不知道如何在 rake 命令中调用它以允许我在 Heroku 中设置调度程序。

知道放置此方法的最佳位置以及如何从命令行调用它吗?

提前致谢。

您可以在您的项目中创建一个script 目录,并将您的脚本从db/seeds.rb 放入该目录,可能名为update_accounts.rb。然后你可以 运行 它与

rails runner script/update_accounts.rb

并在 heroku 中安排该任务。有关 rails runner here.

的更多信息

我建议使用 Sidekiq 等后台处理器:https://github.com/mperham/sidekiq

使用 Sidekiq 后,您需要一个像 https://github.com/moove-it/sidekiq-scheduler 这样的调度程序来确保它按您的需要定期发生。

随着您的应用程序的增长和您需要更多 worker,这将变得更容易维护。它还将您的计划转移到版本控制中。