God*_*a74 4 ruby ruby-on-rails sidekiq docker docker-compose
我正在设置我的 Docker 环境并尝试让 sidekiq 与我的其他服务一起启动docker-compose up,但是 sidekiq 在尝试连接到错误的redis URL 时抛出错误:
redis_1 | 1:M 19 Jun 02:04:35.137 * The server is now ready to accept connections on port 6379
sidekiq_1 | Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)
Run Code Online (Sandbox Code Playgroud)
我非常有信心在我的 Rails 应用程序中没有引用会让 Sidekiq 连接到 localhost 而不是redis在 docker-compose.yml 中创建的服务:
version: '3'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app
ports:
- 3000:3000
depends_on:
- db
redis:
image: redis:3.2-alpine
command: redis-server
ports:
- 6379:6379
volumes:
- redis:/var/lib/redis/data
sidekiq:
depends_on:
- db
- redis
build: .
command: bundle exec sidekiq -C config/sidekiq.yml
volumes:
- .:/app
env_file:
- .env
volumes:
redis:
postgres:
Run Code Online (Sandbox Code Playgroud)
在config/initializers/sidekiq.rb我对 redis url 进行了硬编码:
Sidekiq.configure_server do |config|
config.redis = { url: 'redis://redis:6379/0' }
end
Sidekiq.configure_client do |config|
config.redis = { url: 'redis://redis:6379/0' }
end
Run Code Online (Sandbox Code Playgroud)
在这一点上,我被难住了。我已经完全删除了任何现有的容器,docker-compose build然后docker-compose up多次运行而没有任何变化。
我已经做了全局搜索我的应用程序内的文件夹寻找任何遗留的引用127.0.0.1:6379和localhost:6379并得到没有命中,所以我不知道为什么sidekiq被卡住寻找在这一点上127.0.0.1 Redis的。
我找不到解释为什么会发生这种情况。但我确实在 sidekiq 源代码中注意到了这一点:
def determine_redis_provider
ENV[ENV['REDIS_PROVIDER'] || 'REDIS_URL']
end
Run Code Online (Sandbox Code Playgroud)
如果 中:url未定义config,sidekiq 会查看环境变量REDIS_URL。您可以尝试将其设置为您的网址,以便轻松解决。要使其与 docker 一起使用,您应该能够简单地添加REDIS_URL='redis://redis:6379/0'到您的撰写文件中。详细信息可以在这里找到
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |