веб-сайт flask + реагировать с использованием App Engine, URL-адрес не найден - PullRequest
1 голос
/ 30 мая 2020

Простой веб-сайт flask + response, который я развернул в App Engine, отлично работает локально. Когда я обслуживаю main.py локально и go в / hello, он возвращает «hello world», как и должно. Однако при развертывании в движке приложения и использовании предоставленного URL с / hello он возвращает «Запрошенный URL / hello не найден на этом сервере».

ниже main.py

from flask import Flask, render_template
app = Flask(__name__, static_folder="./build/static", template_folder="./build")
 @app.route("/")
 def index():
     return render_template("index.html")
@app.route("/hello")
def hello():
    return "Hello World!"
if __name__ == "__main__":
    app.run(host='127.0.0.1', port=8080, debug=True)

вот мой app.yaml

runtime: python37
entrypoint: gunicorn -b :$PORT main:app

handlers:
- url: /
  static_files: build/index.html
  upload: build/index.html
- url: /
  static_dir: build
- url: /(.*)
  script: auto
project_root/
build/
   static/
   index.html
app.yaml
main.py

Он также возвращает индекс. html отлично на движке приложения при вводе [provided-url] .com /

Ответы [ 2 ]

1 голос
/ 30 мая 2020

Ваши обработчики URL-адресов в app.yaml закорочены. Первый / совпадает и никогда не попадает во второй обработчик /. Я думаю, вам нужно что-то вроде:

handlers:
- url: /static
  static_dir: build/static/
- url: /(.*)
  script: auto

, тогда пусть ваши Flask обработчики сделают всю работу. Затем отправляйте все свои звонки в файлы stati c на /static/somefile.jpg et c.

EDIT: Если вы хотите облегчить себе жизнь, не обслуживайте index.html в виде файла stati c. Подавайте его из main.py, как вы это настроили. Все ваши URL-адреса React обрабатываются в main.py, и все они рендерит index.html отдельно. Вся ваша маршрутизация и компоненты React вызываются изнутри index.html. Ваши вызовы API также обрабатываются в main.py.

@app.route("/")
def index():
    template_context = {
        'msg'      : "you are on my home page",
    }
    return render_template("index.html", **template_context)

@app.route("/profile")
def profile():
    template_context = {
        'msg'      : "this is your user profile",
    }
    return render_template("index.html", **template_context)

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

EDIT # 2: Если вы настаиваете на обслуживании index. html как файла stati c, вы Вы можете настроить свой app.yaml следующим образом:

handlers:
- url: /
  static_files: build/index.html
  upload: build/index.html
- url: /static
  static_dir: build/static/
- url: /(.*)
  script: auto

, и вы удалите обработчик @app.route("/") из main.py, так как он никогда не будет там.

0 голосов
/ 04 июня 2020

Итак, после того, как я много дней возился с моим кодом, проблема была в обработчиках. С runtime:python37 вы не должны использовать обработчики. Не знаю почему, но когда я удалил обработчики из app.yaml, все заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...