Artículo
· 9 hr atrás Lectura de 3 min

Ejecución de aplicaciones WSGI con IPM

Introducción a la ejecución de WSGI en IRIS

Con IRIS 2024+, los usuarios podéis alojar aplicaciones WSGI utilizando Security.Applications. Como ejemplo, un usuario puede hacer algo como esto

Ejemplo de trabajo mínimo

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, otherwise will be recognized as CSP application
Set sc = ##class(Security.Applications).Create("/flask", .props)
zw sc

donde el directorio /path/to/flaskapp contiene un archivo myapp.py que dice

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello, WSGI!"

Ahora, id a la URL http(s)://<host>:<port>/<optional-prefix>/flask/. Debería mostrar "¡Hello, WSGI!" en texto sin formato.

Errores comunes

  1. Si la URL http(s):///flask/ no funciona, comprobad primero la barra diagonal final, que debe estar presente.

  2. Además, cuando se ejecuta por primera vez, flask necesita ser instalado para python embebido (no su intérprete python local a nivel de SO). Comprobad que la instalación se ha realizado correctamente accediendo al intérprete de python embebido y ejecutando import flask.

  3. Finalmente, se debe conceder permiso de lectura, para /path/to/flaskapp/myapp.py y todas las carpetas superiores, al usuario del SO con que se esté ejecutando IRIS .

  4. Si el error sigue sin resolverse, comprobad si hay entradas en messages.log. También podéis poneros en contacto con nosotros a través de posting an issue

Uso de IPM para enviar aplicaciones WSGI de fácil instalación

IPM facilita el proceso:
1. copiando el directorio de la aplicación flask a un lugar con acceso de lectura garantizado
2. instalando las dependencias python relevantes en un archivo requirements.txt.

Ejemplo de paquete

Aquí hay un ejemplo que puede instalarse fácilmente donde quiera que IPM (v0.6.3+) esté instalado en IRIS 2024+. Clonad este paquete a un <PACKAGE_ROOT> adecuado, e iniciad un terminal IRIS

zn "%SYS"
zpm "load <PACKAGE_ROOT>"

Tras la instalación, deberíais poder visitar http(s)://<host>:<port>/<optional-instance-prefix>/my/flask/demo/. En mi caso, la URL es http://localhost:8080/iris-ml-wsgi/my/flask/demo/ y se lee:

This is a sample WSGI application using Flask!

Sugerencia: necesitáis instalar zpm siguiendo las instrucciones aquí primero para que el comando zpm funcione.

El module.xml del repositorio anterior también está listado aquí para una referencia rápida

<?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>
Comentarios (0)1
Inicie sesión o regístrese para continuar