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
-
Si la URL http(s)://
/flask/ no funciona, comprobad primero la barra diagonal final, que debe estar presente. -
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 ejecutandoimport flask
. -
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 . -
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>