Pravin Mishra
Pravin Mishra

Reputation: 8434

Ruby on Rails always pointing local redis Server

I am using Redis with my ruby on rails application, To map Ruby object with Redis using redis-objects, dm-core and dm-redis-adapter. Below are the code snipts

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

It's working fine for local redis server. Why app always pointing local redis, Even when providing remote host and port?

SOLVED: checkout my answer.

Upvotes: 3

Views: 2196

Answers (2)

Pravin Mishra
Pravin Mishra

Reputation: 8434

As per Question:

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

In above code, I am overloading Redis configuration in User model. In that case, I need to write remote configuration in model as well.

DataMapper.setup(:default, {:adapter  => "redis", :host => '<VM IP>', :port => <VM PORT>, :password => '<PASSWORD>'})

Upvotes: 5

Anirudhan J
Anirudhan J

Reputation: 2072

Redis.current is a method which always gives a new connection if the instance variable @current is empty. See https://github.com/redis/redis-rb/blob/master/lib/redis.rb#L19

  def self.current
    @current ||= Redis.new
  end

Try assigning Redis.new to some other global like $redis. This should mostly fix your issue.

Upvotes: 1

Related Questions