RubyonRails:操作正在进行中-connect(2)将被阻塞



我在别人制作的网站上工作。有一个生产版本。

我正在尝试向30天内属性未更新的用户发送电子邮件。

在我尝试使用deliver_later之前,一切都正常。我之所以使用deliver_later,是因为deliver_now会导致每秒发送太多电子邮件的问题。我目前正在使用Mailtrap进行测试,但我想我会在生产中遇到这种问题。

所以我选择为每封电子邮件等待1秒:

@testproperties = Property.has_not_updated.includes(:user)
@testproperties.each do |property|
UserMailer.with(property: property, user: property.user).check_listing.deliver_later(wait:1.seconds)
end

这导致IO::EINPROGRESSWaitWritableOperation now in progress - connect(2) would block

什么也不发送。

我不知道如何解决这个问题。

编辑:我可以在生产现场看到我可以参观路线/sidekiq。路由文件有这个块:

authenticate :user, lambda { |u| u.admin? } do
mount Sidekiq::Web => '/sidekiq'
end

我可以查看web界面并查看所有作业。一切都在那里工作。但我需要访问运行在localhost:3000上的开发版本。

尝试在本地访问仍然会导致:

Operation now in progress - connect(2) would block

#  # Socket#connect
def connect_nonblock(addr, exception: true)
__connect_nonblock(addr, exception)
end
end

Sidekiq.rb:

require 'sidekiq'
unless Rails.env.test?
host = 'localhost'
port = '6379'
namespace = 'sitename'
Sidekiq.configure_server do |config|
config.redis = { url: "redis://#{host}:#{port}", namespace: namespace }
schedule_file = "config/schedule.yml"
if File.exists?(schedule_file)
Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
end
config.server_middleware do |chain|
chain.add Sidekiq::Status::ServerMiddleware, expiration: 30.minutes
end
config.client_middleware do |chain|
chain.add Sidekiq::Status::ClientMiddleware, expiration: 30.minutes
end
end
Sidekiq.configure_client do |config|
config.redis = { url: "redis://#{host}:#{port}", namespace: namespace }
config.client_middleware do |chain|
chain.add Sidekiq::Status::ClientMiddleware, expiration: 30.minutes
end
end
end

用于电缆。yml:

development:
adapter: async
url: redis://localhost:6379/1
channel_prefix: sitename_dev
test:
adapter: async
production:
adapter: redis
url: redis://localhost:6379/1
channel_prefix: sitename_production

生产服务器正在运行Ubuntu,并且他们已经安装了redis-server

我没有在本地安装它。(我通过Windows WSL使用Ubuntu(

sudo apt install redis-server

我现在可以访问web界面了。

确保Redis已启动:

sudo service redis-server restart

相关内容

最新更新