【问题标题】:Rails 6 Auto delete posts from database every 24 hoursRails 6 每 24 小时自动从数据库中删除帖子
【发布时间】:2020-08-16 04:44:49
【问题描述】:

有没有办法自动删除帖子/产品/文章或在 rails 6 应用程序上创建的任何内容?我正在尝试建立一个在线图像存储库,用户可以上传仅显示 24 小时然后被删除的图像。我通过活动存储和 Postgres 发布和保存图片/文本,但我无法得到它被自动删除。我已经阅读过 sidekiq 和 resque 调度程序,但我发现很难理解并使其工作。我尝试了一些教程并阅读了文档,但我仍然遇到问题。谁能指出我正确的方向或尝试帮助我?

【问题讨论】:

  • whenever gem 通过rake 任务安排对模型的destroy 调用。实际上,您应该隐藏图像而不是销毁它们,但这是产品决定。
  • 我想销毁它们,因为我不想弄乱服务器(希望我会得到很多用户),我想让它不需要我。你知道喜欢构建它部署它,只是不时看一下,看看是否一切正常。我以为只要 gem 只在 linux 中使用?现在我在 Windows 中构建,虽然我将部署在 linux 私有服务器中
  • whenever gem 的问题在于它可能在生产中不受支持。要么使用 rake 任务并通过 worker 运行它们,要么像你说的那样学习如何使用 Sidekiq 和 Redis,我过去曾在许多应用程序中使用过它们,并且工作起来非常棒!
  • sidekiq有什么有用的教程吗?这些天我一直在看和阅读,但我无法弄清楚
  • github.com/mperham/sidekiq/wiki/Getting-Started 你应该做的是尝试其中的一些,然后在需要帮助时返回一个特定的 sidekiq 问题。如果你掌握了 Sidekiq 的窍门,它就相当不错了。

标签: ruby-on-rails automation


【解决方案1】:

你有很多选择

  1. 最简单的方法是创建一个rake task 并设置一个cron job 以每分钟调用一次或类似的时间。如果您每 24 小时调用一次,则帖子可能会停留长达 47 小时。

  2. 您可以通过两种方式使用delayed jobs

    2.1 在 after_create 回调中,设置工作以在 24 小时后删除帖子。像这样handle_asynchronously :in_the_future, run_at: Proc.new { 24.hours.from_now }

    2.2 使用delayed_job_recurring gem 在选项一中做同样的事情,但不需要使用 cron

编辑:我会使用选项 2.1,因为它是最简单且易于维护的选项,唯一的缺点是它会为每个帖子创建一个工作,但即使每天有一百万个帖子也不应该成为问题

【讨论】:

  • 是否积极维护delayed_job,至少在提交方面似乎没有太多活动。
  • 现在你提到它似乎已经被遗忘了......不过,我多年来一直在生产环境中使用它没有问题,所以......没那么糟糕,仍然不会受到伤害寻找新事物
  • 是的,我也用过很多次,目前没有问题...
猜你喜欢
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多