【问题标题】:Use whenever gem to setup a cron job每当 gem 设置 cron 作业时使用
【发布时间】:2016-03-09 14:07:47
【问题描述】:

我想设置一个cron job 来删除两分钟以上的屏幕截图,并让 cron 作业每两分钟运行一次。

schedule.rb 文件的内容

every 2.minutes do
  runner 'screenshot.delete_old', output: {error: "#{path}/log/error.log", standard: "#{path}/log/cron.log"}
end

模型截图.rb文件内容

def self.delete_old
       # @old_screenshots = Screenshot.where('Screenshot.created_at < ?', Time.now)
        #@old_screenshots.delete_all
        #@screenshot.delete_old
        #Screenshot.delete
        screenshot_ids = screenshot.find(:all, :conditions =>            ["created_at ", 2.minutes.ago])
        if screenshot_ids.size > 0
             screenshot.destroy(screenshot_ids)
             puts "#{screenshot_ids.size} screenshots have been deleted!"
        end
    end

我更新了 crontab 文件并运行了 rails 服务器,期望删除截图。但它不起作用。有人可以帮我解决这个问题吗?谢谢。

【问题讨论】:

    标签: ruby-on-rails-4 whenever


    【解决方案1】:

    Ruby 中的类的首字母应该大写,也许你应该试试:

    every 2.minutes do
      runner 'Screenshot.delete_old', output: {error: "#{path}/log/error.log", standard: "#{path}/log/cron.log"}
    end
    

    和你的模型:

    def self.delete_old
      screenshot_ids = Screenshot.where('created_at < ?', 2.minutes.ago))
      if screenshot_ids.size > 0
        Screenshot.destroy(screenshot_ids)
        puts "#{screenshot_ids.size} screenshots have been deleted!"
      end
    end
    

    【讨论】:

    • 我已经从 sql 请求中删除了分号,再试一次。并且,请尝试从控制台运行此代码以查看发生了什么。错误日志会有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多