ruby - 将Redis链接到Sinatra Docker容器的正确方法

标签 ruby docker sinatra resque docker-compose

我正在编写一个基于微服务的小型应用程序,其中有一个redis实例,一些 ruby 代码/容器可以通过Resque访问。目前在我的docker compose中,我像这样链接:

redis:
  image: redis:latest
  ports:
    - '6379:6379'
ruby_worker:
  image: my_user/my_image:latest
  links:
    - redis:db

这很好用(我现在仅将其命名为:db,因为这是我在查找链接时找到的示例)。
在我的ruby代码中,我必须像下面这样设置我的Resque redis服务器:
Resque.redis = ENV['DB_PORT_6379_TCP_ADDR'] + ':6379'

但这似乎并不正确。它取决于确切的redis名称,如果我不得不启动一个不同的redis实例(例如我今天在使用docker cloud的过程中所做的事情),它将找不到redis服务器。到目前为止,我总共有3个容器连接到此Redis以进行重新排序。一个小的sinatra前端,和2个 worker 。我不是一个铁杆的人,并且在3天前从未使用过resque。非常抱歉,如果我错过了一些基础知识。

在我的ruby代码中是否有更好的方法连接到我的redis实例?有没有办法在我的docker-compose中传递redis名称?现在,我的resque-web容器的配置如下所示,并且看起来工作正常:
resque:
  image: ennexa/resque-web
  links:
  - redis:redisserver
  ports:
    - "5678:5678"
  command: "-r redis://redisserver:6379"

最佳答案

不要使用那些链接环境变量,它们已被弃用,并且它们不再存在于用户定义的网络中。

一个好的方法是首先默认使用名称hostname redis。您始终可以为任何服务加上别名以使用该名称,因此几乎不需要更改默认名称。例如:

links:
  - someservice:redis

要覆盖默认值,您可以创建一些特定于应用程序的env var,例如REDIS_HOSTNAME,并从环境部分进行设置(但再次声明,这几乎是没有必要的):
environment:
    REDIS_HOSTNAME=foo

关于ruby - 将Redis链接到Sinatra Docker容器的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35735831/

相关文章:

ruby - 如何使用 Nokogiri 添加没有值的属性

ruby - 我可以在中间停止 RSpec 测试运行吗?

java - docker stack deploy 期间容器没有启动,找不到或加载主类,无法进一步诊断

docker - Docker Swarm集群:守护进程

ruby - 使用 Sinatra 提供 XHTML

ruby-on-rails - 在 Assets 日志中隐藏 ActionController::RoutingError

sql - Rails 每天显示不同的对象

java - 为什么Docker容器的内存使用量不会减少?

javascript - 使用 Sinatra 进行流式传输,逐渐更新目的地

ruby - 为什么这个简单的 Ruby 代码不能在 HAML 中运行?