然而,当我们尝试在本地连接到该TCP套接字时,却无法连接。
我们的Rake任务用于设置队列:
task "resque:setup" do
# First launch our listener process in the background
`./some_process_that_listens_on_port_12345 &`
# Now get our queue worker ready, set up Redis backing store
port = 12345
ENV['QUEUE'] = '*'
ENV['PORT'] = port.to_s
Resque.redis = ENV['REDISTOGO_URL']
# Start working from the queue
WorkerClass.enqueue
end
这样可以正常工作--我们的监听器进程在运行,Resque尝试处理队列中的任务。但是,Resque作业失败了,因为它们无法连接到localhost:12345
(具体来说是Errno :: ECONNREFUSED
)。
可能,Heroku正在阻止同一dyno上的TCP套接字通信。有没有办法绕过这个问题?
我尝试把“code”这个情况去掉,只在命令行上执行(在服务器进程声称已正确绑定到12345之后):
nc localhost 12345 -w 1 </dev/null
但这也没有连接成功。
我们目前正在调查更改客户端/服务器代码,使用UNIXSocket
代替TCPSocket
,但由于它是一款现成的软件,如果可能的话,我们希望避免自己的分支。