Article
· Août 7 3m de lecture

Exécution d'applications WSGI avec IPM

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

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!"

Maintenant, accédez à l'URL http(s)://<host>:<port>/<optional-prefix>/flask/. Elle doit afficher « Hello, WSGI!» en texte brut.

Pièges courants

  1. Si l'URL http(s):///flask/ ne fonctionne pas, vérifiez d'abord la barre oblique finale, qui doit être présente.
  2. 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.
  3. 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.
  4. 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

  1. copiant le répertoire d'applications Flask vers un emplacement avec un accès en lecture garanti
  2. 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>"

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>
Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer