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:in
create'
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
Sounds like the hostname redis
is failing DNS lookup.