我正在尝试使用Sidekiq w Redis运行Rails应用程序..
配置/初始化/
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正在运行......
The server is now ready to accept connections on port 6379
在我的message_controller.rb中,在db中创建消息后,我运行
DelayMessageWorker.perform_at(@message[:delay_until_time], @message[:id])
我的DelayMessageWorker类是
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
然而在开发模式下运行localhost,我得到了
(0.2ms)开始交易
SQL(0.5ms)INSERT INTO“messages”(3.0ms)提交事务
(3.0ms)提交事务
在393ms内完成500内部服务器错误(ActiveRecord:3.7ms)
RuntimeError(提供nodename或servname,或未知):
app / controllers / messages_controller.rb:34:在block in create'
app/controllers/messages_controller.rb:31:in
创建'
消息写在数据库中,因此错误来自Sidekiq-Redis?
谢谢你的建议
更新
我修改了我的sidekiq.rb初始化程序以获得正确的redis主机
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
答案 0 :(得分:0)
Sounds like the hostname redis
is failing DNS lookup.