我正在写一个screen scraper,它从帖子中获取一个URL列表,然后访问这些URL并获取页面上所有链接的列表。然后,它访问所有链接(原始链接和从片段中),并获得一个图像列表。当我内联运行作业时,一切都很好(除了需要30秒才能完成,这是一个问题,因为响应API调用需要很长时间)。出于某种原因,当我使用相同的html" target="_blank">代码并使用后台工作程序运行它时,有两个URL永远不会更新为已完成。它始终是相同的2个URL。
更奇怪的是,我收到了错误信息
3 TID-ov9t89ido WARN: NoMethodError: undefined method `search' for #<Mechanize::File:0x007f9d86e77a40>
3 TID-ov9t89ido警告:/app/app/models/scraper。rb:16:inscrape\u images'/app/app/workers/image\u worker。rb:5:in
perform'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/processor。rb:151:inexecute_job'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/processor。rb:133:in
block(2 levels)in process'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/chain。rb:127:invoke'/app/vendor/bundle/ruby/2.2.0/gems/newrelic_rpm-3.12.1.298/lib/newrelic/agent/instrumentation/sidekiq中的块。rb:33:inblock-in-call'/app/vendor/bundle/ruby/2.2.0/gems/newrelic_rpm-3.12.1.298/lib/new_relic/agent/instrumentation/controller_instrumentation。rb:361:inperform_action_with_newrelic_trace'/app/vendor/bundle/ruby/2.2.0/gems/newrelic_rpm-3.12.1.298/lib/newrelic/agent/instrumentation/sidekiq。rb:29:in
call'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/chain。rb:129:invoke'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/server/active_record中的块。rb:6:incall'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/chain。rb:129:ininvoke'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/server/retry_jobs中的block。rb:74:in
call'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/chain。rb:129:ininvoke'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/server/logging中的block。rb:11:in
block-in-call'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/logging。rb:31:inwith_context'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/server/logging。rb:7:in
call'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/chain。rb:129:invoke'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/chain中的块。rb:132:在中调用'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/middleware/chain。rb:132:ininvoke'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/processor。rb:128:in
block-in-process'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/processor。rb:167:instats'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/processor。rb:127:in
process'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/processor。rb:79:inprocess\u one'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/processor。rb:67:in
run'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/util。rb:16:inwatchdog'/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.1.1/lib/sidekiq/util。rb:24:in
block in safe_thread'
这来自以下代码:
def self.scrape_images(uri)
page = get_page(uri)
base_url = page.uri.to_s
images = page.search('//img') || []
qualify_images(uri, images).push(base_url)
end
我看到Mechanize不是线程安全的,我认为这可能是我的问题,但我不认为当它适用于其他所有方面时,它会给我这个错误。任何帮助都将是光荣的,谢谢阅读。
我正在添加答案,因为我在搜索时没有找到答案。如果Mechanize访问内容类型的页面。它不返回页面对象,而是返回文件对象。在我的案例中,我用一个保护条款解决了这个问题:
return [] unless page.class == Mechanize::Page
问题内容: 我有一个返回图像URL的服务,并且使用以下代码进行调用: 在我看来,我曾经有一个带有ng-src属性的图像,它的工作原理非常像这样: 然后,我决定在SPAN上使用背景图片: 现在该流程仅在第一次运行时有效,之后我可以在控制台中看到以下html 这表示该变量已更新,但是html仍处于其初始状态。 我尝试在成功发布后致电apply / digest,但已经遇到了错误 $ digest(正在
我在尝试导出独立应用程序时遇到问题。 当我使用eclise执行它时,它运行正常,但当我试图导出到可运行的jar时,它会给我一些错误。 我的坚持。xml看起来像 它位于src/META-INF/persistence。xml 从终端运行时得到的堆栈跟踪是: 在爪哇。朗,反思一下。方法在组织中调用(未知源)。日食jdt。内部的jarinjarloader。罐式装载机。main(jarsrcloader
问题内容: 我正在编写用于生产监控的独立Java应用程序。一旦开始运行,就会将api配置为.properties文件中设置的默认值。在运行状态下,可以更改api的配置,并应相应更新.properties文件。有办法实现吗?还是有其他方法可以实现这一目标? 提前致谢 问题答案: Java Properties类(api在此处)指定了应该正确执行的“ load”和“ store”方法。使用FileIn
我正在写一个程序,显示如下所示的航班信息: 我的问题是使用方法时: 当正常运行时,由于某种原因它不会执行,但是当我使用调试器执行程序时,一切都执行得很好,我得到了一个有意义的输出(格式不是很好,但我可以使用),为什么会发生这种情况? 输出应该是这样的: 当我正常运行时,我会得到这个: 这是当我一步虽然(或运行调试): 我希望输出的是单步执行部分(稍后我将处理格式化) eddit:我已经在错误流中添
问题内容: 早上好!最近,我买了一个Arduino开发板来对房间进行“灯光控制”。这是我编写的固件代码: 之后,我使用了Python解释器中的pySerial来控制引脚,一切工作正常。这是一段解释器输出: 然后,我决定编写一个简单的Python脚本来执行相同的操作: 但这根本不起作用!Arduino显示在我启动脚本的过程中收到了一些东西,但是什么也没发生。这是脚本的strace输出: 看起来一切都
问题内容: 我有这种变化的背景颜色的例子的创立负荷使用或者与 但是,我想在一个复选框上创建一个事件,将其选中时将背景色更改为绿色,而取消选择时将其更改为默认值。 我无法使用上述方法进行这项工作。 有任何想法吗? PS:由于某些原因,我可以通过使用而不是背景来更改前景色 问题答案: LAF可以随意忽略某些(仅可见的?不知道的)JComponent属性的自定义设置,如以下文档所述: 外观和感觉取决于该