Ruby on Rails在给定的时间后清除数据库中的旧行

时间:2015-12-02 21:30:53

标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord rails-migrations

我在rails服务器上有一个ruby,它维护用于移动应用程序的可视化自动化测试的图像。开发人员在每个拉取请求上运行可视化自动化,因此他或她确切地知道进入仓库的内容。

已经过了一个多月的生产使用,我开始考虑如何删除旧版本或旧图像,这样我就可以节省空间(以及每个循环的一些时间)。活动记录如下:

class Project < ActiveRecord::Base
  has_many :test_suites
  has_many :builds
end

迁移看起来像这样:

class AddProjectToBuild < ActiveRecord::Migration
  def change
    add_reference :builds, :project, index: true
  end
end

我希望能够在超过一个月的时候删除构建版本。如何在不触及上个月运行的构建的情况下在生产环境中执行此操作?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您需要cron来实现它。如果您的生产环境位于Heroku,那么您需要了解Heroku Scheduler。它可以帮助您每天运行某项任务。在该任务中,您将检索created_at / updated_at或您自己的时间戳小于1.month.ago的所有构建并删除它们。

答案 1 :(得分:1)

我会按照以下步骤执行此操作:

  • 创建一个rake任务,其中包含删除旧记录的逻辑和查询。

  • 使用生产服务器上的wheneverrufus-scheduler等gem来安排任务。