Introduction à l'exécution de WSGI dans IRIS
Avec IRIS 2024+, les utilisateurs peuvent héberger des applications WSGI à l'aide de Security.Applications
. À titre d'exemple, un utilisateur peut faire quelque chose comme ceci.
Exemple minimal
zn "%SYS"
Kill props
Set props("Description") = "Sample WSGI Application"
Set props("MatchRoles") = ":%All"
Set props("WSGIAppLocation") = "/path/to/flaskapp"
Set props("WSGIAppName") = "myapp"
Set props("WSGICallable") = "app"
Set props("DispatchClass") = "%SYS.Python.WSGI" // important, sinon sera reconnu comme une application CSP
Set sc = ##class(Security.Applications).Create("/flask", .props)
zw sc
ObjectScriptObjectScript
où le répertoire /path/to/flaskapp
contient un fichier myapp.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello, WSGI!"
ObjectScriptObjectScript
Maintenant, accédez à l'URL http(s)://<host>:<port>/<optional-prefix>/flask/
. Elle doit afficher « Hello, WSGI!» en texte brut.
Pièges courants
- Si l'URL http(s):///flask/ ne fonctionne pas, vérifiez d'abord la barre oblique finale, qui doit être présente.
- De plus, lors de la première exécution, flask doit être installé pour Embedded Python (pas votre interpréteur Python local au niveau du système d'exploitation). Vérifiez que l'installation a réussi en accédant au shell Embedded Python et en exécutant import flask.
- Enfin, l'autorisation de lecture de l'utilisateur du système d'exploitation qu'IRIS suppose doit être accordée à /path/to/flaskapp/myapp.py et à tous les dossiers parents.
- Si l'erreur ne peut toujours pas être résolue, vérifiez les entrées dans messages.log. Vous pouvez également nous contacter en publiant un problème
Utilisation d'IPM pour expédier des applications WSGI pour une installation facile
IPM facilite le processus en
- copiant le répertoire d'applications Flask vers un emplacement avec un accès en lecture garanti
- installant les dépendances Python pertinentes dans un fichier requirements.txt
Exemple de package
Voici un exemple qui peut être installé facilement partout où IPM (v0.7.2+) est installé sur IRIS 2024+. Clonez ce package dans un <PACKAGE_ROOT> approprié et démarrez un terminal IRIS
zn "%SYS"
zpm "load <PACKAGE_ROOT>"
ObjectScriptObjectScript
Après une installation réussie, vous devriez pouvoir accéder à http(s)://<host>:<port>/<optional-instance-prefix>/my/flask/demo/
. Dans mon cas, l'URL est http://localhost:8080/iris-ml-wsgi/my/flask/demo/
et elle contient :
This is a sample WSGI application using Flask!
Astuce : vous devez d'abord installer zpm en suivant les instructions ici pour que la commande zpm fonctionne.
Le module.xml du dépôt ci-dessus est également répertorié ici pour une référence rapide
<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25">
<Document name="flask-demo.ZPM">
<Module>
<Name>flask-demo</Name>
<Version>1.0.0</Version>
<Description>This is a demo of a flask application</Description>
<Keywords>flask</Keywords>
<Author>
<Person>Shuheng Liu</Person>
<Organization>InterSystems</Organization>
<CopyrightDate>2024</CopyrightDate>
<License>MIT</License>
<Notes>notes</Notes>
</Author>
<Packaging>module</Packaging>
<SystemRequirements Version=">=2024.1" />
<SourcesRoot>src</SourcesRoot>
<FileCopy Name="src/python/flaskapp/" Target="${libdir}flask-demo/flaskapp/"/>
<SystemSetting Name="CSP.DefaultFileCharset" Value="UTF-8"/>
<WSGIApplication
Url="/my/flask/demo"
UnauthenticatedEnabled="1"
Description="Sample WSGI application using Flask"
MatchRoles=":${dbrole}"
WSGIAppLocation="${libdir}flask-demo/flaskapp/"
WSGIAppName="app"
WSGICallable="app"
/>
<AfterInstallMessage>Module installed successfully!</AfterInstallMessage>
</Module>
</Document>
</Export>
XMLXML