我想知道如何在Heroku工人动力学之间进行交流.
我们希望Resque工作人员读取一个队列并将数据发送到在同一个dyno上运行的另一个进程. “其他过程”是通常使用TCP套接字(端口xyz)监听命令的现成软件.它被设置为在Resque工作者启动之前作为后台进程运行.
但是,当我们尝试在本地连接到该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套接字通信.有没有解决的办法?
我试图把“代码”从这个情况中拿走,只是在命令行执行(在服务器进程声称它正确绑定到12345之后):
nc localhost 12345 -w 1 </dev/null
但是这也不会连接.
我们正在调查更改客户端/服务器代码以使用双方的UNIXSocket而不是TCPSocket,但是由于它是一个现成的软件,所以我们宁可避免使用自己的fork.