如何在不使用docker-compose for rails的情况下配置sidekiq&redis?

时间:2019-06-21 17:35:15

标签: ruby-on-rails docker redis port sidekiq

我想在我的Rails应用程序中实现sidekiq。我成功创建了图像和容器。但是,当我尝试在应用程序中执行作业容器时,找不到Redis。我如何将我的应用程序容器(具有其自己的IP:端口)与redis容器(具有其自己的IP:端口)相连接。

我认为问题隐藏在sidekiq.rb中。但是我不确定

sidekiq_config = { url: "<container url>" }

Sidekiq.configure_server do |config|
  config.redis = sidekiq_config
end

Sidekiq.configure_client do |config|
  config.redis = sidekiq_config
end

我要运行2个容器:my-appredis。在my-app容器中,sidekiq应该知道如何ping redis容器。

PS 我的导师不允许我使用docker-compose,所以非常棘手

2 个答案:

答案 0 :(得分:0)

考虑您的陈述:

  

...您的具有Redis容器(具有自己的IP:端口)的应用程序(具有自己的IP:端口)。

您可能要检查"<container url>"的外观。要获得更多的见解,这是我建议的样子:

config / initializers / sidekiq.rb

Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://redis.example.com:7372/0' }
end

Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://redis.example.com:7372/0' }
end

然后在您的application.rb中将队列适配器定义为sidekiq

config / application.rb

config.active_job.queue_adapter = :sidekiq

此外,请注意,sidekiq在config/sidekiq.yml中查找配置文件,如果存在该文件,它将以已定义的配置开始。因此,请检查您是否有配置设置。这可能是您遇到的主要问题,因为您没有对所做的事情提供足够的线索。

config / sidekiq.yml

---
:verbose: false
:concurrency: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
:timeout: 30
:queues:
  - [low_priority, 1]
  - [high_priority, 2] # high priority

要了解如何将Redis与Sidekiq结合使用,请检查https://github.com/mperham/sidekiq/wiki/Using-Redis

答案 1 :(得分:0)

我发现我们可以使用--link

轻松地将2个容器与docker连接
sudo docker run --name my-application --link my-redis-container:redis

这个Link对我有帮助。在这里,我们实际上不需要使用docker-compose