大家好我正在尝试使用flask设置AWS cloud9环境来开发Web应用程序。我是AWS / flask的新手,并坚持一个问题。 IDE环境与在我的浏览器中预览应用程序之间似乎存在问题(我使用的是chrome,但也在IE中尝试过)。
来自app.py:
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身份)运行时:
[root@ip-172-31-11-201 environment]# python ./app.py
Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
当我右键点击http://0.0.0.0:8080/
时,它会打开一个yab并将我重定向到公共IP x.x.x.x:8080
并最终超时并给我:
err_connection_timeout
当我尝试使用IDE运行选项运行应用程序时,它将转到:
Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
此时它也会暂停。所以这让我很困惑,当我在cloud9 IDE之外运行时,我没有这个问题。我知道在文档中你应该通过端口8080指向0.0.0.0。所以我不太清楚为什么运行run会改变我指定的IP。
我也尝试手动输入我的项目和用户名:
此时它会将我重定向到一个页面,告诉我“无法找到我的用户名”。然后我尝试设置一个完成的cloud9.io帐户,我确认了我的帐户但无法登录,仍然有“找不到用户名”页面。
之后,我使用sublime替换app.py
0.0.0.0
在本地测试了来自cloud9的127.0.0.1
文件,并且它在本地工作。
我的配置中是否有任何遗漏?自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
感谢您的帮助!
答案 0 :(得分:2)
我通过搜索EC2问题找到了答案:
您必须通过AWS防火墙/安全设置。 你必须:
添加此规则:
以下是屏幕截图链接: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:为实例设置安全组
答案 1 :(得分:0)
对我来说,我没有正确地运行/预览应用程序。我要么尝试使用绿色运行按钮,要么使用终端中的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'])
当前的AWS C9 os环境变量低于
os.environ['IP']
是127.0.0.1 os.environ['PORT']
是8080 对端口/主机进行硬编码也适用于localhost和127.0.0.01
我没有像hlidwin提到的那样更改安全设置。