Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么';对于一个有暂停的连续后台作业,它是正确的Ruby后台宝石吗?_Ruby On Rails_Ruby_Multithreading_Background_Sidekiq - Fatal编程技术网

Ruby on rails 什么';对于一个有暂停的连续后台作业,它是正确的Ruby后台宝石吗?

Ruby on rails 什么';对于一个有暂停的连续后台作业,它是正确的Ruby后台宝石吗?,ruby-on-rails,ruby,multithreading,background,sidekiq,Ruby On Rails,Ruby,Multithreading,Background,Sidekiq,我有一个应用程序,需要以给定的周期(例如,每天一次,每周一次)对大量外部网站(>10000页,>100个域)进行投票 一个网页应该被查询的实际时间并不需要被精确地满足,仅仅是平均一个页面被轮询的周期变化+/-20%。 对我来说,这听起来像是一份背景工作 我看了一些宝石,比如Sidekiq、Rescue、Delayed job,但我不确定它们是否真的是为了满足我的需要。我认为主要方案是在网页上的事件之后开始的作业,例如用户注册后发送的电子邮件,或者最好将耗时的计算推到后台 在我的例子中,它感觉更像

我有一个应用程序,需要以给定的周期(例如,每天一次,每周一次)对大量外部网站(>10000页,>100个域)进行投票

一个网页应该被查询的实际时间并不需要被精确地满足,仅仅是平均一个页面被轮询的周期变化+/-20%。 对我来说,这听起来像是一份背景工作

我看了一些宝石,比如Sidekiq、Rescue、Delayed job,但我不确定它们是否真的是为了满足我的需要。我认为主要方案是在网页上的事件之后开始的作业,例如用户注册后发送的电子邮件,或者最好将耗时的计算推到后台

在我的例子中,它感觉更像是一个由单个作业跟随的时间表,尽管实际的轮询频率可能会根据组织我的网站查询的实际算法而变化

我想有一张这样的桌子:

create_table "websites" do |t|
    t.string   "url"
    t.datetime "tracking_last_time"
    t.datetime "tracking_next_time"
    t.integer   "tracking_period"
end
我的后台任务现在可以通过
下次跟踪
对网站列表排序

然后,后台任务可以:

  • 看看它能睡多少秒/分钟/小时
  • 这样做
  • 在需要的时候醒来
  • 查询网站
  • 更新下一次跟踪信息,并
  • 看看是否还有其他问题需要解决
因为我有大量的网站要查询,我甚至可能需要不止一个后台任务

我想我可以为每个域启动一个作业,并使用持久连接优化http请求

无论如何,我不确定这些著名的背景宝石是否适合我的需要。
有人有什么想法/建议吗?

首先,推荐问题不是技术问题,所以。话虽如此,请看下面的例子。我想如果你的问题与“我如何才能完成这项任务”更为相似,那么你的问题会更合适。即使如此,请证明你已经尝试了一些东西。你忘了告诉我们你使用的是什么操作系统*基于nix的系统内置了一个很棒的“定期任务调度器”,名为
cron
,非常适合用于此目的。您可以使用cron轻松运行基于Rails的脚本,这些脚本可以访问数据库,但不会造成长时间启动或加载任何HTTP/web/前端处理。您可能希望在成功处理页面后,按
跟踪上次时间+跟踪期间
进行排序,并更新
跟踪上次时间
。那么下次你就根本不需要
跟踪了。您还需要一个失败尝试计数器和一个“站点关闭”或“不处理”标志,一旦失败尝试超过某个值,就会设置该标志。此外,使用
head
请求检查页面更改,并将其与请求获取页面之前的
跟踪上次时间
值进行比较。这可以减少网络拥塞,并在页面未更改的情况下加快处理速度。“因为我有大量的网站要查询,我甚至可能需要不止一个后台任务”——嗯,是的,通常你会将一个任务分为多个任务。我想每个页面一个(或者每个站点最少一个)@工程工程师:我想你是对的。我想节省一些时间尝试一些不合适的东西。但我想我会试试一颗宝石,看看它是怎么回事。我还要看一下鲁弗斯调度器。谢谢。首先,推荐问题在技术上不是问题。话虽如此,请看下面的例子。我想如果你的问题与“我如何才能完成这项任务”更为相似,那么你的问题会更合适。即使如此,请证明你已经尝试了一些东西。你忘了告诉我们你使用的是什么操作系统*基于nix的系统内置了一个很棒的“定期任务调度器”,名为
cron
,非常适合用于此目的。您可以使用cron轻松运行基于Rails的脚本,这些脚本可以访问数据库,但不会造成长时间启动或加载任何HTTP/web/前端处理。您可能希望在成功处理页面后,按
跟踪上次时间+跟踪期间
进行排序,并更新
跟踪上次时间
。那么下次你就根本不需要
跟踪了。您还需要一个失败尝试计数器和一个“站点关闭”或“不处理”标志,一旦失败尝试超过某个值,就会设置该标志。此外,使用
head
请求检查页面更改,并将其与请求获取页面之前的
跟踪上次时间
值进行比较。这可以减少网络拥塞,并在页面未更改的情况下加快处理速度。“因为我有大量的网站要查询,我甚至可能需要不止一个后台任务”——嗯,是的,通常你会将一个任务分为多个任务。我想每个页面一个(或者每个站点最少一个)@工程工程师:我想你是对的。我想节省一些时间尝试一些不合适的东西。但我想我会试试一颗宝石,看看它是怎么回事。我还要看一下鲁弗斯调度器。谢谢