簡體   English   中英

OSError: [Errno 98] 地址已在使用中

[英]OSError: [Errno 98] Address already in use

我使用 flask Z2567A5EC9705EB7AC2C984033ZE0 框架編寫了一個簡單的 REST API。 它在我的本地機器上按預期工作。

我嘗試將其部署到 Google App Engine。 當我運行它時,我收到以下錯誤。

 "/opt/python3.9/lib/python3.9/socketserver.py", line 475, in server_activate      self.socket.listen(self.request_queue_size)  OSError: [Errno 98] Address already in use

app.yaml

runtime: python39

要求.txt

Flask==1.1.2
firebase-admin==4.5.3
pyfcm==1.5.1

主文件

import flask
import firebase_admin
import pyfcm 


from flask import Flask, request, jsonify
from firebase_admin import credentials, firestore, initialize_app
from pyfcm import FCMNotification


# Initialize Flask App
app = flask.Flask(__name__)
# app.config["DEBUG"] = True

cred = credentials.Certificate('key.json')
default_app = initialize_app(cred)
db = firestore.client()


@app.route('/', methods=['GET'])
def home():
    return "<h1>Welcome</h1>"

app.run()

命令sudo netstat -nlp | grep 1 sudo netstat -nlp | grep 1產生這個 output:

tcp        0      0 127.0.0.1:8998          0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:65001           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      117/sshd

這些是有效的聽眾嗎? 我怎樣才能知道這些過程是關於什么的?

跟蹤如下。

File "/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
      worker.init_process()
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/workers/gthread.py", line 92, in init_process
      super().init_process()
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/workers/base.py", line 119, in init_process
      self.load_wsgi()
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
      self.wsgi = self.app.wsgi()
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
      self.callable = self.load()
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
      return self.load_wsgiapp()
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
      return util.import_app(self.app_uri)
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/util.py", line 358, in import_app
      mod = importlib.import_module(module)
    File "/opt/python3.9/lib/python3.9/importlib/__init__.py", line 127, in import_module
      return _bootstrap._gcd_import(name[level:], package, level)
    File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
    File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
    File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
    File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
    File "<frozen importlib._bootstrap_external>", line 790, in exec_module
    File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
    File "/srv/main.py", line 111, in <module>
      app.run()
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/flask/app.py", line 990, in run
      run_simple(host, port, self, **options)
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/werkzeug/serving.py", line 1052, in run_simple
      inner()
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/werkzeug/serving.py", line 996, in inner
      srv = make_server(
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/werkzeug/serving.py", line 847, in make_server
      return ThreadedWSGIServer(
    File "/layers/google.python.pip/pip/lib/python3.9/site-packages/werkzeug/serving.py", line 740, in __init__
      HTTPServer.__init__(self, server_address, handler)
    File "/opt/python3.9/lib/python3.9/socketserver.py", line 452, in __init__
      self.server_bind()
    File "/opt/python3.9/lib/python3.9/http/server.py", line 138, in server_bind
      socketserver.TCPServer.server_bind(self)
    File "/opt/python3.9/lib/python3.9/socketserver.py", line 466, in server_bind
      self.socket.bind(self.server_address)
  OSError: [Errno 98] Address already in use

最好的解釋是看谷歌的例子 app.run()應該只用於本地測試。 該示例具有以下注釋:

if __name__ == '__main__':
    # This is used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)

因此,在app.run()之前添加類似的if語句就足夠了。 我已經在我這邊復制了你的代碼,我得到了同樣的錯誤。 添加if語句后在應用程序引擎上運行良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM