我在远程 Linux 机器上运行 CherryPy 作为网络服务器。最终用户通过互联网访问 CherryPy 实例所服务的网站。到目前为止,一切都很好。
现在,我想要一个开发版本的网站,在同一台机器上运行,但在不同的端口上,这样我就可以开发和测试而不会干扰产品网站。我需要在同一台机器上进行开发,因为它包含大量数据,移动到不同的机器上是不切实际的。
当然,开发实例的代码位于不同的目录中,因此当我编辑开发代码时,它不会触发产品实例的重新加载或以任何方式影响产品实例。
但是,如果我将 dev 实例配置为在与 prod 实例不同的端口上运行并尝试启动 dev 实例,我会得到:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/cherrypy/process/wspbus.py", line 197, in publish
output.append(listener(*args, **kwargs))
File "/usr/lib/python2.7/dist-packages/cherrypy/_cpserver.py", line 151, in start
ServerAdapter.start(self)
File "/usr/lib/python2.7/dist-packages/cherrypy/process/servers.py", line 167, in start
wait_for_free_port(*self.bind_addr)
File "/usr/lib/python2.7/dist-packages/cherrypy/process/servers.py", line 410, in wait_for_free_port
raise IOError("Port %r not free on %r" % (port, host))
IOError: Port 8080 not free on '127.0.0.1'
dev 和 prod 实例都没有在端口 8080 上运行。prod 实例在 SSL (443) 上,而我可以将 dev 实例放在任意端口上(假设它在 98765 上)。我没有在任何配置文件的任何地方指定 8080。所以我没想到会发生端口冲突,但是,例如,CherryPy 产生了 2 个进程——我猜有某种父子关系——其中一个进程以某种方式正在侦听localhost:8080
。因为我尝试启动的两个实例都会发生这种情况,所以第二个实例无法启动,因为最终在 8080 上出现了这种冲突。
我已经尝试了几件事,例如关闭自动重新加载和超时监控,希望 CherryPy 不会启动与 8080 相关的进程,但到目前为止还没有运气。
提前感谢您的帮助!