在Mac和Ubuntu上引入非同步執行的Sidekiq

首先

我们终于决定在我们公司引入Sidekiq了(厉害啊)。
引入的原因大概是这样的。

    • rundeckでバッチを定期的に起動している

 

    • バッチが増え的たら重くて動かなくなった(一応動くけど)

 

    • rundeckがおもい原因は重大なメモリ不足

 

    • メモリ不足の原因は数時間かかるバッチのレスポンスをひたすら待っているから

 

    sidekiqに蹴り飛ばすしかねえ

尽管有这种感觉,但由于对于未来的异步执行处理非常有用,我们希望积极地采用它。
※并非所有处理都适合需要响应的情况,不能应用到所有场景。

(请注意)我正在相当踌躇地摸索着、忽隐忽现。
(请注意)这是一个工作记录,所以有点草草地写下来的感觉。

本地环境配置和实施

要使用Sidekiq,需要Redis。
Redis是一个NoSQL数据库,用于管理Sidekiq的任务等。
由于只进行了最基本的设置,请自行查找并修改不便之处。

在Mac上安装Redis。

使用Homebrew安装Redis

添加宝石

Sinatra是必需的,以查看仪表板。

# sidekiq
gem 'sidekiq'
gem 'sinatra', require: false
gem 'redis-namespace'

请执行bundle install。

准备设置文件

Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://127.0.0.1:6379', namespace: 'sidekiq' }
end

Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://127.0.0.1:6379', namespace: 'sidekiq' }
end

工人的创建

无论是使用generate生成还是普通地创建文件,都可以。
我们将把任务交给这个工具。
使用Rails g sidekiq:worker Update。

class UpdateWorker
  include Sidekiq::Worker

  def perform
    update_service = Products::UpdateService.new
    update_service.execute
  end
end

控制器的修复 de

我会把它分配给刚创建的工人。

def product_update
  UpdateWorker.perform_async
  render json: { result: sidekiq_web_url }.to_json
  rescue StandardError => e
    raise e
end

修改routes

为了查看仪表板,进行设置。

  require 'sidekiq/web'
  mount Sidekiq::Web => '/sidekiq'

启动 Redis

スクリーンショット 2018-11-15 16.24.07.png

启动 sidekiq

スクリーンショット 2018-11-15 16.24.01.png

搞糟了!

スクリーンショット 2018-11-15 16.10.29.png

生产环境配置

这次的目标是Ubuntu 16.04.5 LTS。

Redis的配置

首先进行安装。
$ sudo apt安装redis-server
一旦完成,
sudo service redis启动
如果没有错误地执行,则OK。

Sidekiq的配置

使用bundle install指令。
搞定了,太好了。太棒了。

用守护进程模式启动 Sidekiq:
“`
$ bundle exec sidekiq –daemon –environment=production –logfile /project/[rails_project]/log/sidekiq.log
“`

总结

太难了…
希望以后能够熟练运用它呢!!!

如果想在博客中查看,请点击这里。
异步执行的引入 Sidekiq 在 Mac Ubuntu 上的使用

广告
将在 10 秒后关闭
bannerAds