【问题标题】:Running cherrypy app on AWS: socket could not be created在 AWS 上运行 cherrypy 应用程序:无法创建套接字
【发布时间】:2021-03-06 06:46:33
【问题描述】:

我在我的 Windows PC 上开发了一个小型网络应用程序并在本地进行了测试。
然后我想将它转移到 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 上本地启动时不会产生错误。
我对任何与网络相关的东西都是全新的,所以问题可能非常明显。也许,我在配置中遗漏了一些东西,或者 `quickstart` 可能不是启动应用程序的正确选项。
请帮忙

【问题讨论】:

    标签: python amazon-web-services cherrypy web-frameworks


    【解决方案1】:

    您很可能绑定到了错误的地址。

    在你config.update调用中,将socket_host的值修改为0.0.0.0

    cherrypy.config.update({'server.socket_host': '0.0.0.0',
                            'server.socket_port': 9028,})
    

    这应该允许您的应用侦听主机中所有可用网络地址上的请求。

    【讨论】:

    • 这个我试过了,结果和本地运行一样。我的朋友告诉我我需要设置 nginx。我希望它可以在没有任何额外的服务器软件的情况下解决,但显然情况并非如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2021-08-03
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多