修改初始化配置

正如我们所讨论的,我正试图利用这一点,但遇到了一个障碍,因为我正在自定义:

/config/initializers/100-sidekiq.rb

这是我修改后的代码,我正在:

  • 为每个作业提供一个可访问的重试计数属性,我正在插件中使用它来根据作业被重试的次数来更改工作流逻辑。

在文件中,我将其修改为:

  • 创建一个自定义中间件类来检索值
  • 将该类添加到链中,以便包含它
require "sidekiq/pausable"
require "sidekiq/discourse_event"
require "sidekiq_logster_reporter"
require "sidekiq_long_running_job_logger"
require "mini_scheduler_long_running_job_logger"

 module Sidekiq::Middleware::Server # <-- NEW
   class SetRetryCountMiddleware
     def call(worker, job, queue)
       worker.retry_count = job["retry_count"] if worker.respond_to?(:retry_count=)
       yield
     end
   end
 end


Sidekiq.configure_client { |config| config.redis = Discourse.sidekiq_redis_config }

Sidekiq.configure_server do |config|
  config.redis = Discourse.sidekiq_redis_config
  config[:skip_default_job_logging] = false

  config.server_middleware do |chain|
    chain.add Sidekiq::Pausable
    chain.add Sidekiq::Middleware::Server::SetRetryCountMiddleware # <-- NEW
    chain.add Sidekiq::DiscourseEvent
  end

目前,我正在使用 app.yml 中的文件编辑脚本和 sed 来实现这一点。

这会破坏存储库的完整性,因此我无法使用捆绑的已编译资产。

关于如何从插件进行这些修改的任何建议?

1 个赞

堆栈中的特定位置重要吗?我尝试在 plugin.rb 中进行此操作,它似乎添加了中间件 :crossed_fingers:

class BreakEverythingMiddleware
  def call(worker, job, queue)
    puts "中间件奏效了!"
    raise "中间件奏效了"
  end
end

Sidekiq.default_configuration.server_middleware { |chain| chain.add BreakEverythingMiddleware }
1 个赞

不应该!

很棒的建议,我将尝试一下!

2 个赞