gpt4 book ai didi

ruby-on-rails - 需要 redis 时,rails 控制台返回 false

转载 作者:可可西里 更新时间:2023-11-01 11:27:05 24 4
gpt4 key购买 nike

我刚刚开始使用 redis,在使用我的 Rails 应用程序设置 Redis 时遇到了一些困难。我的 redis 服务器正在运行,但是当我转到 Rails 控制台并键入 require 'redis' 时,我得到了一个错误值。我的问题是如何在安装 gem 'redis', '~> 3.3', '>= 3.3.3' 后解决这个问题。在我的 Rails 应用程序中,我在哪里需要 redis,以便可以连接到 redis。

rails 控制台

irb(main):001:0> require 'redis'
=> false
irb(main):002:0> require 'redis'
=> false
irb(main):003:0> reload!
Reloading...
=> true
irb(main):004:0> require 'redis'
=> false
irb(main):005:0>

最佳答案

如果你看一下关于 require 的文档

Loads the given name, returning true if successful and false if the feature is already loaded.

因此,当您运行 Rails 控制台时,已经加载了很多 gem,您可以开始使用它,而不需要。

可能您在 config/initializers 中有一个包含以下内容的 ruby​​ 初始化程序:

require 'redis'
require 'redis/objects'

加载完成后,您就可以开始在控制台中使用 Redis。

irb(main):043:0> my_redis = Redis.new(:host => ::APP_CONFIG[:redis_server][:host],
:port => ::APP_CONFIG[:redis_server][:port],
:timeout => ::APP_CONFIG[:redis_server][:timeout]
)
irb(main):044:1* irb(main):045:1* irb(main):046:1> => #<Redis client v3.0.7 for redis://127.0.0.1:6379/0>
irb(main):047:0> my_redis.set "foo", [1, 2, 3].to_json
=> "OK"
irb(main):048:0> JSON.parse(my_redis.get("foo"))
=> [1, 2, 3]

最后,当你尝试加载一个不存在的库时,它会给你一个错误

irb(main):023:0> require 'patata'
LoadError: cannot load such file -- patata

对于 Redis 配置,只需创建文件 config/initializers/redis.rbconfig/redis.yml 请参阅此要点 gist see this

使用代码:

#config/initializers/redis.rb
require 'redis'
require 'redis/objects'

REDIS_CONFIG = YAML.load( File.open( Rails.root.join("config/redis.yml") ) ).symbolize_keys
dflt = REDIS_CONFIG[:default].symbolize_keys
cnfg = dflt.merge(REDIS_CONFIG[Rails.env.to_sym].symbolize_keys) if REDIS_CONFIG[Rails.env.to_sym]

$redis = Redis.new(cnfg)
Redis::Objects.redis = $redis
#$redis_ns = Redis::Namespace.new(cnfg[:namespace], :redis => $redis) if cnfg[:namespace]

# To clear out the db before each test
$redis.flushdb if Rails.env = "test"

#config/redis.yml
default:
host: localhost
port: 6379
development:
db: 0
# namespace: appname_dev
test:
db: 1
# namespace: appname_test
production:
db: 2
host: 192.168.1.100
# namespace: appname_prod

最后,redis 客户端初始化器的允许参数和默认参数是:

 DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
:password => nil,
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:inherit_socket => false
}

关于ruby-on-rails - 需要 redis 时,rails 控制台返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44698561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com