Ruby on Rails 总是指向本地 redis 服务器

3
我正在使用 Redis 与我的 Ruby on Rails 应用程序,使用 redis-objectsdm-coredm-redis-adapter 将 Ruby 对象映射到 Redis 中。以下是代码片段。

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服务器,它可以正常工作。为什么应用程序总是指向本地redis,即使提供了远程主机和端口?

已解决:请查看我的答案。

2个回答

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"})

在上面的代码中,我正在重载用户模型中的Redis配置。在这种情况下,我还需要在模型中编写远程配置。
DataMapper.setup(:default, {:adapter  => "redis", :host => '<VM IP>', :port => <VM PORT>, :password => '<PASSWORD>'})

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。这应该大部分解决您的问题。

我没有使用redis-rb。 - Pravin Mishra
我认为redis-objects在内部使用redis-rb。请参见https://github.com/nateware/redis-objects/blob/master/redis-objects.gemspec - Anirudhan J
已解决,请查看我的答案。 - Pravin Mishra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接