运行Flask应用程序时AWS cloud9超时

2024-04-26 02:18:18 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我正在尝试用flask设置一个AWS cloud9环境来开发一个web应用程序。我是AWS/flask的新手,在一个问题上卡住了。在IDE环境和在浏览器中预览应用程序之间似乎有一个问题(我正在使用chrome,但也尝试过IE)。在

从应用程序副本公司名称:

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World'


app.run(host=os.getenv('IP', '0.0.0.0'), port=int(os.getenv('PORT', 8080)))

if __name__ == '__main__':
    app.run()
    app.debug(True)

当我在终端(以root用户身份)运行此命令时:

^{pr2}$

当我右键单击http://0.0.0.0:8080/时,它将打开一个yab并将我重定向到一个公共IP x.x.x.x:8080,最终将超时并给出:

err_connection_timeout

当我尝试使用IDE run选项运行应用程序时,我将执行以下操作:

Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)

此时它也将暂停。所以这让我很困惑,当我在cloud9ide之外运行这个时,我没有这个问题。我知道在文档中,您应该指向端口8080上的0.0.0.0。所以我不太确定为什么用run运行它会改变我指定的IP。在

我还尝试手动将我的项目和用户名手动输入:

https://projectname-c9-username.c9.io/

这时它会将我重定向到一个页面,告诉我“找不到我的用户名”。然后我试图设置一个cloud9.io帐户,完成后,我确认了我的帐户,但无法登录,仍然有“找不到用户名”页面。在

之后,我从cloud9本地测试了我的app.py文件,用sublime替换了0.0.0.0代替了{},并且在本地工作。在

我的配置中有什么遗漏吗?自从AWS收购cloud9之后,设置有什么变化吗?我一直在关注在线教程和视频,但是无法解决这个问题。在

从IDE环境:

# python --version
Python 2.7.12

# pip freeze flask
astroid==1.5.3
aws-cfn-bootstrap==1.4
awscli==1.11.132
Babel==0.9.4
backports.functools-lru-cache==1.4
backports.ssl-match-hostname==3.4.0.2
boto==2.42.0
botocore==1.5.95
chardet==2.0.1
click==6.7
cloud-init==0.7.6
CodeIntel==0.9.3
colorama==0.2.5
configobj==4.7.2
configparser==3.5.0
docutils==0.11
ecdsa==0.11
enum34==1.1.6
Flask==0.12.2
futures==3.0.3
gyp==0.1
ikpdb==1.1.2
Inflector==2.0.11
iniparse==0.3.1
isort==4.2.15
itsdangerous==0.24
jedi==0.11.0
Jinja2==2.7.2
jmespath==0.9.2
jsonpatch==1.2
jsonpointer==1.0
kitchen==1.1.1
lazy-object-proxy==1.3.1
lockfile==0.8
MarkupSafe==0.11
mccabe==0.6.1
paramiko==1.15.1
parso==0.1.0
PIL==1.1.6
ply==3.4
pyasn1==0.1.7
pycrypto==2.6.1
pycurl==7.19.0
pygpgme==0.3
pyliblzma==0.5.3
pylint==1.7.4
pylint-django==0.7.2
pylint-flask==0.5
pylint-plugin-utils==0.2.6
pystache==0.5.3
python-daemon==1.5.2
python-dateutil==2.1
pyxattr==0.5.0
PyYAML==3.10
requests==1.2.3
rsa==3.4.1
simplejson==3.6.5
singledispatch==3.4.0.3
six==1.11.0
subprocess32==3.2.7
urlgrabber==3.10
urllib3==1.8.2
virtualenv==15.1.0
Werkzeug==0.13
wrapt==1.10.11
yum-metadata-parser==1.1.4
zope.cachedescriptors==4.3.0 

谢谢你的帮助!在


Tags: runnameimportipawsapp应用程序flask
2条回答

对我来说,我没有正确运行/预览应用程序。我试图使用绿色的Run按钮或者终端中的flask run。在

这是对我有用的方法。在

运行应用程序

要运行应用程序,请转到终端并键入 python [NAMEOFPYTHONFILE] 所以 python app.py

预览应用程序

要查看应用程序,请转到C9工具栏中的“预览”,然后单击“预览运行应用程序”。 你会被引导到一个疯狂的网址。 我的是https://a823459f29b04402a3793bec16fbXXXX.vfs.cloud9.us-east-1.amazonaws.com/(编辑了一点)

我的代码(应用程序副本)在

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Let's double check"

if __name__ == '__main__':
    app.debug = True
    app.run(host=os.environ['IP'], port=os.environ['PORT']) 

当前的awsc9os环境变量如下所示

  • os.environ['IP']是127.0.0.1
  • os.environ['PORT']是8080

硬编码端口/主机也适用于localhost和127.0.0.01

  • 在应用程序运行(host='localhost',port='8080')
  • 在应用程序运行(主机=“127.0.0.1”,端口=“8080”)

我不必像hlidwin提到的那样更改安全设置。在

我通过搜索EC2问题得出了答案:

你必须通过AWS防火墙/安全设置。 你必须:

  1. 进入EC2(从所有AWS服务列表中)
  2. 单击安全组
  3. 单击您的Cloud9实例
  4. 单击入站
  5. 单击“编辑”
  6. 单击添加规则
  7. 添加此规则:

    • 选择“自定义TCP规则”作为“类型”。-所有的交通也正常。在
    • 对于端口范围,键入8080、8081或8082。-如果你做了'All Traffic',这将默认为所有端口。在
    • 选择“Anywhere”作为“源”,该选项类似于0.0.0.0/0

    下面是一个屏幕截图链接:https://imgur.com/a/zhQbA

AWS的C9文档中确实隐藏了这一点。 https://docs.aws.amazon.com/cloud9/latest/user-guide/app-preview.html#app-preview-share-security-group 在“通过Internet共享正在运行的应用程序”中,步骤2:为实例设置安全组

相关问题 更多 >