小编use*_*317的帖子

ActiveJob:回调之间可访问的实例变量

我的工作中有以下片段:

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)

但当工作执行时@carnil. 是否可以以某种方式将实例变量从一个回调传递到第二个回调?哪怕只是ID也好。干杯。

ruby-on-rails rails-activejob

6
推荐指数
1
解决办法
2706
查看次数

Sidekiq 中多线程上的 Selenium WebDriver

我有一个关于 Selenium WebDriver 及其在多线程中的使用的问题。我有一个从网站获取一些数据的应用程序,因此我使用使用 Selenium WebDriver 的 Watir 浏览器。我也配置了 Sidekiq。我的流程是我将一些使用 chromedriver 初始化 watir 的作业排入队列,因此同时有 6 个并发线程运行 Selenium WebDriver。有时我会注意到一些错误,例如: Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9519or Selenium::WebDriver::Error::WebDriverError: unable to bind to locking port 9514 within 45 secondsSelenium::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)

ruby selenium watir sidekiq selenium-webdriver

5
推荐指数
0
解决办法
581
查看次数

将一个巨大的字符串作为参数传递给 Sidekiq 工作人员是个好主意吗?

我正在开发一个爬虫,它可以浏览网站并在 Sidekiq 工作人员中解析网站的特定部分。想象一下当抓取工具访问一个包含 10 个我感兴趣的元素并且每个元素都在 Sidekiq 中排队的网站时的情况。目前,我将元素的源代码作为参数传递,稍后将在 Nokogiri 中加载。我的问题是 - 将一个巨大的字符串作为参数传递给 Sidekiq 工作人员是个好主意吗?字符串长度始终在 77,000-80,000 个字符之间,因此它确实很大。或者我应该将其存储在临时表中并在 Nokogiri 加载之前找到特定记录?

ruby ruby-on-rails nokogiri sidekiq

4
推荐指数
1
解决办法
1483
查看次数