Pokouším se nasadit Baňky aplikace na GAE, který slouží vestavěný Reagovat frontend vedle Baňky frontend a backend trasy, definovanými v několika plány.
Lokálně, vše funguje dobře. V Baňce aplikace, já používám Reagovat stavět adresáři jako statické složky a vrátit Reagovat index.html soubor pro většinu frontend trasy.
Tady je základní přehled o můj strukturu:
- main.py
- build
- index.html
- static
- css
- js
- api
- auth.py
- templates
- static
Index trasu na Baňky úlovky Url, někdy parametrizované pomocí id a odešle tyto žádosti Reagovat frontend:
@views.route('/', defaults={'path': '', 'id': ''})
@views.route('/<string:path>', defaults={'id': ''}) # Match all strings
@views.route('/<path:path>', defaults={'id': ''}) # Match all paths
@views.route('/<string:path>/<string:id>') # Match URLs that contain IDs
def index(path, id):
return app.send_static_file('index.html')
Nicméně, ověřování UI není v Reagovat frontend. To musí být doručena do Baňky samostatně. Zvládnout tyto požadavky, ověřování plán přepne url prefix a statické složky.
authentication = Blueprint(
'authentication',
__name__,
url_prefix='/auth',
static_folder='static',
template_folder='templates'
)
@authentication.route('/admin_settings', methods=['GET'])
@login_required
def admin_settings():
return render_template('admin_settings.html')
Znovu, když běží lokálně, toto nastavení funguje dobře. Ale při nasazení na GAE, setkal jsem se s mnoha různými chybami, které vyplývají z toho, jak jsem strukturu aplikace.yaml nastavení, včetně 502s, kód 404, a nekonečně čekající síťové požadavky, které jsou zřejmě důsledkem pracovníků načasování.
Jak by měla aplikace.yaml soubor na GAE být napsán pro toto nastavení? Největší úspěch jsem měl s následující aplikaci.yaml soubor, který alespoň načte Reagovat frontend (i když všechny ostatní cesty se zdají vyvolat časové limity):
# app.yaml
runtime: python39
entrypoint: gunicorn -b :$PORT main:app
# handlers
handlers:
- url: /.*
script: main.app