Rails - 按计划运行定期的activerecord命令?

时间:2016-02-23 11:24:28

标签: ruby-on-rails command task

感谢任何帮助开始为Rails控制台activerecord命令行编写重复任务。即,每天晚上11点我想运行以下命令:

Store.all.map { |x| x.update_balance }

update_balanceStore模型中的一个函数。非常感谢任何指针,谢谢!

1 个答案:

答案 0 :(得分:1)

设置rake任务来完成这项工作。然后,它只是从某种调度系统调用rake任务的问题。

如果您使用像Heroku这样的托管服务,则需要使用自己的调度程序。如果没有,你可以通过各种方式实现,但最简单的(假设你是在Linux / unix / ubuntu等服务器上)是使用cron,这是一个内置的调度程序。见这里:https://www.linux.com/learn/tutorials/420397:scheduling-magic-intro-to-cron-on-linux

与cron的一个问题是,它在它自己的用户帐户下运行,而不是你登录到服务器的帐户,这意味着它可能不知道你环境中的某些变量等。这意味着你需要给它一些额外的帮助,例如使用bash,ruby和rake之类的完整路径。这是我的cron列表中计划的rake任务的示例,该列表每天凌晨3点运行:

# m h dom mon dow   command
0 3 * * * /bin/bash -c "source /etc/profile; cd /var/www/apps/myapp/www; /usr/local/bin/rake cached_data:update_all RAILS_ENV=production"