gli*_*a93 1 ruby ruby-on-rails redis
在我的环境文件中,我有:
config.cache_store = :redis_cache_store, { url: ENV.fetch('REDIS_URL_CACHING', 'redis://localhost:6379/0')}
Run Code Online (Sandbox Code Playgroud)
在 Rails 控制台中,如果我打印REDIS_URL_CACHING,我会得到:
> ENV['REDIS_URL_CACHING']
=> "redis://:mypassword@localhost:6379/0
Run Code Online (Sandbox Code Playgroud)
但是,如果我想检查 Rails 是否连接到 Redis,我会得到:
> Rails.cache.redis.keys
=> false
irb(main):004:0> Rails.cache.redis.keys
Traceback (most recent call last):
1: from (irb):4
Redis::CannotConnectError (Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL))
Run Code Online (Sandbox Code Playgroud)
我的 redis.conf 文件如下:
bind 0.0.0.0
requirepass mypassword
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
如果我删除密码选项,它可以工作,但我的 MacBook受到攻击。
在redis gem 指南中,你可以为 redis 设置密码,如下所示:
bind 0.0.0.0
requirepass mypassword
Run Code Online (Sandbox Code Playgroud)
但是,我想按照官方低级缓存指南中提到的方式使用低级缓存
redis = Redis.new(url: "redis://:p4ssw0rd@10.0.1.1:6380/15")
# Or
redis = Redis.new(password: "mysecret")
# And then
redis.set("foo", "bar")
redis.get("foo")
Run Code Online (Sandbox Code Playgroud)
不知道如何配置 redis gem 来使用Rails.cache.fetch
根据已完成的测试,看起来唯一的问题是配置 Rail 的缓存适配器,以便在配置期间将密码正确传送到 Redis 客户端。
在Rails源码中,设置config会将后面的参数传递给底层的Redis客户端。
所以如果这有效:
Redis.new(url: your_url, password: your_pass)
Run Code Online (Sandbox Code Playgroud)
让 Rails 像这样传递这些设置:
config.cache_store = :redis_cache_store, { url: your_url, password: your_pass }
Run Code Online (Sandbox Code Playgroud)