我在Redis使用ruby on rails application,使用redis-objects,dm-core和dm-redis-adapter使用Redis映射Ruby对象。以下是代码段
的Gemfile
gem 'redis-objects'
gem "dm-core", "~> 1.2.1"
gem "dm-redis-adapter"
/config/initializers/redis.rb
// LOCAL REDIS SERVER
Redis.current = Redis.new(:host => '127.0.0.1', :port => 6379)
// REMOTE REDIS SERVER
#Redis.current = Redis.new(:host => '<VM IP>', :port => <VM PORT>, :password => '<PASSWORD>')
Model.rb
DataMapper.setup(:default, {:adapter => "redis"})
class User
include Redis::Objects
include DataMapper::Resource
include ActiveModel::Validations
include ActiveModel::Conversion
# datamapper fields, just used for .create
property :id, Serial
property :name, String
property :email, String
property :des, Text
def id
1
end
end
User.finalize
它适用于本地redis服务器。为什么app始终指向本地redis,即使提供远程主机和端口?
已解决:查看我的回答。
答案 0 :(得分:5)
根据问题:
// LOCAL REDIS SERVER
Redis.current = Redis.new(:host => '127.0.0.1', :port => 6379)
// REMOTE REDIS SERVER
#Redis.current = Redis.new(:host => '<VM IP>', :port => <VM PORT>, :password => '<PASSWORD>')
Model.rb
DataMapper.setup(:default, {:adapter => "redis"})
在上面的代码中,我在User模型中重载了Redis配置。 在这种情况下,我还需要在模型中编写远程配置。
DataMapper.setup(:default, {:adapter => "redis", :host => '<VM IP>', :port => <VM PORT>, :password => '<PASSWORD>'})
答案 1 :(得分:1)
Redis.current是一种方法,如果实例变量@current为空,它总是提供新连接。见https://github.com/redis/redis-rb/blob/master/lib/redis.rb#L19
def self.current
@current ||= Redis.new
end
尝试将Redis.new分配给其他全局,例如$ redis。这应该主要解决你的问题。