【问题标题】:Flask api runs from python shell but not after hosting on UbuntuFlask api 从 python shell 运行,但在 Ubuntu 上托管后不运行
【发布时间】:2019-07-03 14:52:44
【问题描述】:

我正在尝试将程序的输出公开为 api。我正在使用烧瓶来构建我的 api。我想在linux机器上托管同样的东西。当我从本地运行脚本时,我可以在http://127.0.0.1:5000/ 上找到输出,但是当我尝试从 linux 环境运行相同的脚本时,它显示 404 错误或找不到页面错误,并且没有像 404 这样的错误代码, 500 进入我的 linux shell。我怎样才能让它在我的 linux 环境中运行呢?如何测试它是否在 linux 上运行? 下面附上代码:

from flask import Flask, request
from flask_restful import Resource, Api
#from flask.views import MethodView

app = Flask(__name__)
api = Api(app)    
class dtext(Resource):
    def get(self, result):
        return {'data': d.convert(result)}


categories= ["bus", "jack"]   
@app.route('/ec')
def returnResult():
  return categories[0]

if __name__ == '__main__':
     app.run(host="0.0.0.0", port=5000)

【问题讨论】:

  • 你可以试试app.run(host='0.0.0.0', port=5000) 吗?
  • 你需要获取linux机器的IP地址,例如ip address 并在浏览器中使用此 IP 而不是 127.0.0.1。此外,在您的代码中,您只声明路由/ec,但在上面的文本中您尝试调用/
  • @Martin 如果我去掉/ec并给出@app.route('/'),​​那么当我输入我的机器的IP时,它应该显示正确吗?

标签: python linux api flask web-hosting


【解决方案1】:

您是在 Linux 机器本身上运行 127.0.0.1:5000 连接,还是从其他机器连接到 Linux 机器?

您需要确保您的应用程序正在侦听 0.0.0.0,否则它将只接受来自 localhost(本身)的连接。

app.run(host="0.0.0.0", port="5000")

如果您无法在端口 5000 上与您的 linux 机器建立任何连接,则需要查看您的防火墙规则。

【讨论】:

  • 我已经对代码进行了更改,并在问题部分中发布了相同的内容。但仍然收到相同的错误“无法访问此站点”
  • 你知道你要连接的linux机器的IP地址/DNS名称吗?似乎这个问题与联系机器而不是与您的代码有关。
  • 是的,我知道IP地址,输入相同但仍然没有响应
  • 您是否可以通过其他方式联系此 Linux 服务器?你能 ping 通 Linux 服务器吗(比端口级别低,所以会检查你是否有访问权限)?这将取决于您如何配置它,例如其他端口上的 SSH、FTP、HTTP?请检查 Linux 服务器上的 5000 端口是否打开。
  • 我使用 kill $(sudo lsof -t -i:5000) 和 fuser -k 5000/tcp 杀死了端口 5000 上所有正在运行的进程。我目前已登录到虚拟机。我可以使用它,但是当我从 cmd ping 它时,它说没有响应。这可能是问题吗?
【解决方案2】:
  1. 在命令行中,键入flask run --host=0.0.0.0 运行应用程序。 (生产代码的这个坏主意)
  2. 然后打开浏览器。
  3. 键入 Linux 机器的 IP 地址 ([IP ADDRESS]/ec),您应该会看到结果。 您的服务器是虚拟机还是在本地网络或云端?

【讨论】:

    猜你喜欢
    • 2011-10-20
    • 2017-11-04
    • 2016-06-15
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多