运行影响数据库的每日脚本

时间:2015-09-06 20:44:03

标签: ruby-on-rails ruby

我想编写一个脚本,我可以将 cron 配置为在 Rails 应用程序下每24小时运行一次。

script.rb

User.all.each do |user|
    days = user[:days]

    if days >= 1
        days = days - 1
    end

    user.update_attribute(:days, days)
end

但是,每当我运行此命令时,我都会收到此错误:

  

未初始化的常量User(NameError)

出了什么问题?

3 个答案:

答案 0 :(得分:2)

如果您在Rails应用程序的主目录中,那么只需:

bundle

对于cron(假设,script.rb再次出现在主目录中):

  1. 找出which bundle0 * * * * cd /project_home && /bundle_executable exec rails runner -e production script.rb
  2. 的完整路径
  3. 在crontab中添加(相应地更改包和项目路径):

    *(q++)

答案 1 :(得分:0)

另一种方法是在脚本顶部require_relative 'config/environment.rb'(调整用例的路径);这会有轻微的性能损失,但如果你每天只运行一次,那么几秒钟的启动惩罚就不重要了。

此外,您可能需要适当地设置RAILS_ENV以访问正确的数据库表。

答案 2 :(得分:0)

我总是使用whenever来管理我的cron作业。

安装whenever,然后将以下脚本添加到config/schedule.rb

every :day do
  runner 'User.all.each {|user| user.decrement!(:days) if user.days > 0}'
end

然后从终端运行whenever -w