我在我的Windows PC上开发了一个小的web应用程序,并在本地进行了测试。
然后我想把它转移到一个AWS Ubuntu 18实例上。
为简洁起见,该应用程序处理来自网页的表单,并将用户重定向到具有结果的页面。应用程序的内容并不重要,因为错误发生在您可以与其交互之前。
我没有遇到任何问题,在本地运行它(即与下面相同的代码,没有cherrypy.config.update)。
import cherrypy
import os
filepath = os.getcwd()
class MyApp(object):
@cherrypy.expose
def index(self):
with open('./index.html', 'r') as f:
text = f.read()
return text
@cherrypy.expose
def process_filled_form(self, field1, field2):
out = filed1+field2
return(out)
if __name__ == '__main__':
config = {"/folder": {"tools.staticdir.on": True,
"tools.staticdir.dir": os.path.join(filepath, "folder")}}
cherrypy.config.update({'server.socket_host': 'XXX.XXX.XXX.XXX',
'server.socket_port': 9028,})
cherrypy.quickstart(MyApp(), '/', config)
但是,当我尝试在AWS实例上公开该应用程序时,我收到以下错误:
[06/Mar/2021:06:25:12] ENGINE Listening for SIGTERM.
[06/Mar/2021:06:25:12] ENGINE Listening for SIGHUP.
[06/Mar/2021:06:25:12] ENGINE Listening for SIGUSR1.
[06/Mar/2021:06:25:12] ENGINE Bus STARTING
[06/Mar/2021:06:25:12] ENGINE Started monitor thread 'Autoreloader'.
[06/Mar/2021:06:25:12] ENGINE Error in HTTP server: shutting down
Traceback (most recent call last):
File "/home/user/.conda/envs/user_app/lib/python3.9/site-packages/cherrypy/process/servers.py", line 225, in _start_http_thread
self.httpserver.start()
File "/home/user/.conda/envs/user_app/lib/python3.9/site-packages/cheroot/server.py", line 1836, in start
self.prepare()
File "/home/user/.conda/envs/user_app/lib/python3.9/site-packages/cheroot/server.py", line 1791, in prepare
raise socket.error(msg)
OSError: No socket could be created -- (('XXX.XXX.XXX.XXX', 9028): [Errno 99] Cannot assign requested address)
[06/Mar/2021:06:25:12] ENGINE Bus STOPPING
[06/Mar/2021:06:25:12] ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('XXX.XXX.XXX.XXX', 9028)) already shut down
[06/Mar/2021:06:25:12] ENGINE Stopped thread 'Autoreloader'.
[06/Mar/2021:06:25:12] ENGINE Bus STOPPED
[06/Mar/2021:06:25:12] ENGINE Bus EXITING
[06/Mar/2021:06:25:12] ENGINE Bus EXITED
更改套接字不会影响任何内容。在AWS上本地启动时,该应用程序不会产生任何错误。
我对任何与网络相关的东西都是全新的,所以问题可能是smt非常明显。也许,我在配置中遗漏了什么,或者quickstart可能不是启动应用程序的正确选择。
请帮帮忙
发布于 2021-03-07 00:12:04
很可能您绑定到了错误的地址。
在config.update调用中,将socket_host值修改为0.0.0.0
cherrypy.config.update({'server.socket_host': '0.0.0.0',
'server.socket_port': 9028,})这应该允许你的应用程序监听主机中所有可用的网络地址上的请求。
https://stackoverflow.com/questions/66503152
复制相似问题