Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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 Rails:每天运行feedreading脚本(1小时)。建议?_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails:每天运行feedreading脚本(1小时)。建议?

Ruby on rails Rails:每天运行feedreading脚本(1小时)。建议?,ruby-on-rails,Ruby On Rails,我正在用Rails开发一个网站,每天必须运行一次脚本。脚本读取xml提要并更新数据库。我正在使用Rails 3.1.1并在Heroku上运行该网站 为了使脚本在运行时不会完全杀死网站,我在这里有哪些选项?我认为添加一个dyno可以解决这个问题,但成本相当高,特别是当我运行脚本时,在外部并不真正需要它 我可以在另一个数据库上运行脚本并复制它吗?在后台运行它?简言之,我有什么选择 编辑:我在这里不是很清楚。我这里的问题是尽可能少地影响Web服务器/数据库,而不是运行脚本(使用where等)。我计划在

我正在用Rails开发一个网站,每天必须运行一次脚本。脚本读取xml提要并更新数据库。我正在使用Rails 3.1.1并在Heroku上运行该网站

为了使脚本在运行时不会完全杀死网站,我在这里有哪些选项?我认为添加一个dyno可以解决这个问题,但成本相当高,特别是当我运行脚本时,在外部并不真正需要它

我可以在另一个数据库上运行脚本并复制它吗?在后台运行它?简言之,我有什么选择

编辑:我在这里不是很清楚。我这里的问题是尽可能少地影响Web服务器/数据库,而不是运行脚本(使用where等)。我计划在晚上运行脚本以尽可能减少影响,但我仍然不希望网站在这一小时内完全关闭。

检查rails插件。这是非常伟大的,当你想做饲料加工

还可以查看宝石。安装它,并创建一个经常运行的模型方法来执行提要处理

这样,您的web服务器就完全脱离了循环,不会影响服务请求。然而,DB是另一回事。

检查rails插件。这是非常伟大的,当你想做饲料加工

还可以查看宝石。安装它,并创建一个经常运行的模型方法来执行提要处理

这样,您的web服务器就完全脱离了循环,不会影响服务请求。不过,DB是另一回事。

我向您推荐gems和。我在生产中使用它们,开发和测试非常简单方便(请参阅)

我知道heroku非常支持redis。你可以试试宝石。我没用过,但觉得也很酷;)

它也很棒。我提出了一个替代方案。这是你的选择

我向你推荐宝石和珠宝。我在生产中使用它们,开发和测试非常简单方便(请参阅)

我知道heroku非常支持redis。你可以试试宝石。我没用过,但觉得也很酷;)


它也很棒。我提出了一个替代方案。这是您的选择

这在很大程度上取决于脚本的性能特征。如果是非常cpu密集型的,但在其他方面影响很小,那么我就不担心了:当使用heroku调度器之类的东西时,作业运行在单独的dyno中。因为它是一个单独的dyno,所以不会影响其他正在服务请求的dyno

大量使用数据库是另一回事。您的数据库有有限的IO、缓存、CPU等。如果您努力推动它(大量写操作通常比大量读操作更糟糕,因为这些缓存会中断),那么您可能会降低其他动态对象的性能

也可以完全停止网站的工作-如果您的作业最终锁定了应用程序其余部分试图访问的行/表,那么您的web动态将被阻止,直到您的作业释放这些锁定为止

如果在遍历提要时逐个解析提要并更新db行,那么可能没问题:在锁争用方面,大量的小写/读操作比大量的写/读操作要好,我认为您不会对db造成太大的影响,因为听起来您可能一次只从索引列加载一行,进行一些ruby计算,然后更新一行

如果您确实发现性能下降到了不可接受的程度,并且如果瓶颈是读取,那么一种解决方法是使用读取从机(也称为副本,或者在heroku中称为从机)。简而言之,这是一个独立的、只读的数据库服务器,跟踪主数据库服务器(因此它总是非常最新的)。您对该服务器所做的任何操作都不会影响您的主数据库,因此您可以放心地进行查询

如果问题是需要执行的写入次数太多,那么这对您没有帮助。在某种程度上,这可以通过切换到更强大的数据库服务器来解决(但要付出代价)。对于某些使用模式,不同类型的数据存储(例如mongo、redis)有时比关系数据库更合适。有时候,有可能设计出你的一些表现热点,但显然你是最好的人选。


这一切都是非常抽象的——你真正知道的唯一方法就是尝试。设置应用程序的副本,启动此任务并查看性能如何下降(如果您不担心一次性影响,请针对真实应用程序执行此操作)

这在很大程度上取决于脚本的性能特征。如果是非常cpu密集型的,但在其他方面影响很小,那么我就不担心了:当使用heroku调度器之类的东西时,作业运行在单独的dyno中。因为它是一个单独的dyno,所以不会影响其他正在服务请求的dyno

大量使用数据库是另一回事。您的数据库有有限的IO、缓存、CPU等。如果您努力推动它(大量写操作通常比大量读操作更糟糕,因为这些缓存会中断),那么您可能会降低其他动态对象的性能

也可以完全停止网站的工作-如果您的作业最终锁定了应用程序其余部分试图访问的行/表,那么您的web动态将被阻止,直到您的作业释放这些锁定为止

如果在遍历提要时逐个解析提要并更新db行,那么可能没问题:在锁争用方面,大量的小写/读操作比大量的写/读操作要好,我认为您不会对db造成太大的影响,因为听起来您可能一次只从索引列加载一行,进行一些ruby计算,然后更新一行

如果您确实发现性能下降到了不可接受的程度,并且如果瓶颈是读取,那么一种解决方法是使用读取从机(也称为副本)