我刚刚开始使用redis,我的rails应用程序设置了redis。我的redis服务器正在运行但是当我进入rails控制台并输入require 'redis'
时,我得到一个错误的值。我的问题是如何在安装gem 'redis', '~> 3.3', '>= 3.3.3'
后解决这个问题。我在哪里需要redis at我的rails应用程序,以便可以连接到redis。
rails console
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>
答案 0 :(得分:0)
如果您看一下有关require
的文档加载给定名称,如果成功则返回true,如果已加载该功能则返回false。
所以当你运行rails控制台时,已经加载了很多宝石,你可以开始使用它,而不需要。
可能你在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.rb
和config/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
}