Search code examples
ruby-on-rails-4redissidekiq

rails-Sidekiq-Redis : RuntimeError (nodename nor servname provided, or not known)


I am trying to run a Rails app, using Sidekiq w Redis ..

config/initializers/

Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://redis:6379/1', namespace:      'delay_message_dev', driver: :hiredis }
end

Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://redis:6379/1', namespace: 'delay_message_dev', driver: :hiredis }
end

sidekiq-server is running ...

The server is now ready to accept connections on port 6379

In my message_controller.rb , after creating the message in db , I run

DelayMessageWorker.perform_at(@message[:delay_until_time], @message[:id])

and my DelayMessageWorker class is

class DelayMessageWorker
  include Sidekiq::Worker

  def perform(*args)

    # Get the message object
    message = Message.find(message_id)

    # Send an email
    MessageMailer.delay.default(message.recipient_email, message.text)

    # Change the status of the Message object to `sent`
    message.sent = true
    message.save  
  end
end

however running on localhost in dev mode, I get

(0.2ms) begin transaction SQL (0.5ms) INSERT INTO "messages" (3.0ms) commit transaction (3.0ms) commit transaction
Completed 500 Internal Server Error in 393ms (ActiveRecord: 3.7ms)

RuntimeError (nodename nor servname provided, or not known): app/controllers/messages_controller.rb:34:in block in create' app/controllers/messages_controller.rb:31:increate'

the message is written in the DB, so the error comes form Sidekiq-Redis ?
thanks for suggestions

UPDATE

I modified my sidekiq.rb initialiser to get a correct redis host

redis = YAML::load(File.open("#{ Rails.root }/config/redis.yml"))[::Rails.env]

Sidekiq.configure_server do |config|
  config.redis = { url: "redis://#{ redis['host'] }:#{ redis['port'] }/0", namespace: 'delay_message_dev', driver: :hiredis }
end

Sidekiq.configure_client do |config|
  config.redis = { url: "redis://#{ redis['host'] }:#{ redis['port'] }/0", namespace: 'delay_message_dev', driver: :hiredis }
end

Solution

  • Sounds like the hostname redis is failing DNS lookup.