我的工作中有以下片段:
before_enqueue do |job|
# do something
@car = create_car
end
before_perform do |job|
# do something
@car.update(type: 'broken')
end
Run Code Online (Sandbox Code Playgroud)
但当工作执行时@car
是nil
. 是否可以以某种方式将实例变量从一个回调传递到第二个回调?哪怕只是ID
也好。干杯。
我有一个关于 Selenium WebDriver 及其在多线程中的使用的问题。我有一个从网站获取一些数据的应用程序,因此我使用使用 Selenium WebDriver 的 Watir 浏览器。我也配置了 Sidekiq。我的流程是我将一些使用 chromedriver 初始化 watir 的作业排入队列,因此同时有 6 个并发线程运行 Selenium WebDriver。有时我会注意到一些错误,例如:
Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9519
or
Selenium::WebDriver::Error::WebDriverError: unable to bind to locking port 9514 within 45 seconds
或Selenium::WebDriver::Error::UnknownError: unknown error: failed to start a thread for the new session
。这与 Selenium 不是线程安全的事实有关吗?我认为如果我在不同的线程中初始化浏览器,那么它应该可以正常工作,但事实并非如此。有没有办法以某种方式修复它?
# frozen_string_literal: true
require 'selenium/webdriver/remote/http/curb'
module Scrapers
class Browser
def run
Watir::Browser.new(:chrome, watir_options)
end
private
def chrome_args
[
'--ignore-certificate-errors',
'--disable-popup-blocking',
'--no-sandbox',
'--window-size=1024,768',
'--disable-extensions'
]
end
def chrome_options …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个爬虫,它可以浏览网站并在 Sidekiq 工作人员中解析网站的特定部分。想象一下当抓取工具访问一个包含 10 个我感兴趣的元素并且每个元素都在 Sidekiq 中排队的网站时的情况。目前,我将元素的源代码作为参数传递,稍后将在 Nokogiri 中加载。我的问题是 - 将一个巨大的字符串作为参数传递给 Sidekiq 工作人员是个好主意吗?字符串长度始终在 77,000-80,000 个字符之间,因此它确实很大。或者我应该将其存储在临时表中并在 Nokogiri 加载之前找到特定记录?