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



我想在我的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-app & redis 。在my-app容器中,sidekiq应该知道如何ping redis容器。

附言我的导师不允许我使用 docker-compose,所以这很棘手

考虑您的陈述:

。您的应用(具有自己的 IP:Port(和 Redis 容器(具有自己的 IP:Port(。

您可能需要检查"<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

我发现我们可以轻松地使用 docker 连接 2 个容器--link

sudo docker run --name my-application --link my-redis-container:redis

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

相关内容

最新更新