De foutmelding “This is a development server. Do not use it in a production deployment” geeft aan dat Render nog steeds de ingebouwde Flask-server gebruikt in plaats van Waitress. Dit betekent dat je Procfile niet goed wordt opgepakt, of dat Render nog steeds python app.py
uitvoert.
1. Controleer je Procfile
Open je Procfile en controleer of de inhoud correct is. Het bestand moet er zo uitzien:
s-serve --port=$PORT app:app
- web: Dit vertelt Render dat het om een webservice gaat.
- waitress-serve: Start de Waitress WSGI-server.
- –port=$PORT: Render stelt de juiste poort in via de omgeving (bijvoorbeeld poort 5000).
- app:app: De eerste
app
verwijst naarapp.py
, de tweedeapp
verwijst naar het Flask-object (app = Flask(__name__)
).
2. Controleer requirements.txt
Zorg ervoor dat waitress is opgenomen in requirements.txt
:
flask flask-cors waitress
Als je waitress
nog niet had toegevoegd, voeg het toe en commit de wijziging:
git add requirements.txt git commit -m "Add waitress to requirements.txt" git push origin main
3. Controleer het Start Command op Render
Render gebruikt standaard python app.py
als Start Command. Dit moet je overschrijven.
- Ga naar je Render-dashboard.
- Open je kba-project service.
- Ga naar Settings → Environment.
- Zoek het Start Command.
- Vervang het huidige commando door: web: python -m waitress –host=0.0.0.0 –port=$PORT app:app
4. Herdeploy je service
- Ga terug naar Manual Deploy in Render.
- Klik op Deploy latest commit.
Render zal nu de service opnieuw starten met Waitress in plaats van de Flask ontwikkelserver.
5. Controleer de logs
Na het herdeployen:
- Open de Logs in je Render-dashboard.
- Je zou nu Waitress als server moeten zien in plaats van de ingebouwde Flask-server.
6. Test je API
Test de API via cURL (in dos cmd):
curl -k -X POST -H “Content-Type: application/json” -d “{\”vraag\”:\”Hoe laat is het lunchpauze?\”}” https://kba-project.onrender.com/kba
Wat het doet:
-X POST
: Stelt de HTTP-methode in op POST.-H "Content-Type: application/json"
: Geeft aan dat de data in JSON-formaat is.-d "{\"vraag\":\"Hoe laat is het lunchpauze?\"}"
: Verstuurd een JSON-object met een sleutelvraag
en een waarde.http://127.0.0.1:5000/kba
: Verstuurt het verzoek naar je API die lokaal draait op poort 5000.
-k is toegevoegd om:
- cURL het SSL-certificaat van je server niet kan verifiëren.
- Dit gebeurt vaak in staging- of testomgevingen, zoals bij Render.
Gebruik -k
alleen tijdens ontwikkeling. In productie moet je SSL-certificaten goed configureren om veiligheid te garanderen.
7. Code app.py
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(name)
CORS(app) # Sta verzoeken van andere domeinen toe
@app.route(“/kba”, methods=[“POST”])
def answer_question():
if not request.is_json:
return jsonify({“error”: “Verwacht JSON-data”}), 400
data = request.get_json()
vraag = data.get("vraag", "")
if not vraag:
return jsonify({"error": "Geen vraag ontvangen."}), 400
antwoord = f"Hier is je antwoord op: '{vraag}'"
return jsonify({"vraag": vraag, "antwoord": antwoord})
if name == “main“:
from waitress import serve
print(“Running production server with Waitress…”)
serve(app, host=”0.0.0.0″, port=5000)