Hola amigos
Inicie un proyecto en gitlab para ir poniendo todo los avances, que de momento son escuetos, hasta lograr una web funcional hecha con gambas
WebForms.
https://gitlab.com/belmotek/base-web
A efectos prácticos en adelante me referiré como
myweb.gambas al ejecutable creado con el IDE de gambas de un proyecto web que usa el componente
gb.web.gui y no gb.web.form.
¿Que es un servidor Web?
En pocas palabras, es un servidor de red que se encuentra en un servidor físico (oops, un servidor en un servidor) y espera que un cliente envíe una solicitud. Cuando recibe una solicitud, genera una respuesta y la devuelve al cliente. La comunicación entre un cliente y un servidor se realiza mediante el protocolo HTTP. Un cliente puede ser tu navegador o cualquier otro software que hable HTTP.
Fuente:
https://ruslanspivak.com/lsbaws-part1
Protocolo de transferencia de hipertexto
El Protocolo de transferencia de hipertexto (en inglés, Hypertext Transfer Protocol, abreviado HTTP) es el protocolo de comunicación que permite las transferencias de información a través de archivos (XHML, HTML…) en la World Wide Web. Fue desarrollado por el World Wide Web Consortium y la Internet Engineering Task Force, colaboración que culminó en 1999 con la publicación de una serie de RFC, siendo el más importante de ellos el RFC 2616 que especifica la versión 1.1. HTTP define la sintaxis y la semántica que utilizan los elementos de software de la arquitectura web (clientes, servidores, proxies) para comunicarse.
HTTP es un protocolo sin estado, por lo que no guarda ninguna información sobre conexiones anteriores. El desarrollo de aplicaciones web necesita frecuentemente mantener estado. Para esto se usan las cookies, que es información que un servidor puede almacenar en el sistema cliente. Esto le permite a las aplicaciones web instituir la noción de sesión, y también permite rastrear usuarios, ya que las cookies pueden guardarse en el cliente por tiempo indeterminado.
Fuente:
https://es.wikipedia.org/wiki/Protocolo_...hipertexto
Request (solicitud) - Response (respuesta)
Grambas contempla estos conceptos en el componente
gb.web
gb.web.gui
Este componente permite desarrollar aplicaciones web siguiendo un modelo similar al de las aplicaciones GUI clásicas.
Sustituye al anterior componente gb.web.form, siendo más rápido y fácil de usar.
Clases
Align, Application, Arrange, Color, Key, Message, Scroll, Select, Session, WebAudio, WebButton, WebCheckBox, WebComboBox, WebContainer, WebControl, WebControlStyle, WebDateBox, WebDateChooser, WebFileButton, WebForm, WebHBox, WebHtml, WebImage, WebLabel, WebListBox, WebMenu, WebProgressBar, WebRadioButton, WebScrollView, WebSeparator, WebSlider, WebSpinBox, WebTable, WebTableData, WebTabPanel, WebTextArea, WebTextBox, WebTimer, WebTree, WebTreeData, WebVBox
gb.web
This component allows to make a web application based on a CGI script. It manages:
- HTTP requests with the Request class.
- HTTP response with the Response class.
- Session management with the Session class.
- JSP-like HTML pages rendered on the server-side with Gambas Server Pages.
- Application - Returns information about the CGI application.
- CGI - This class is used for managing the CGI interface.
- Request -This class is used for managing the HTTP request.
- Response - This class is used for generating the HTTP response.
- Session - This class is used for managing sessions.
- URL - This class provides static utility methods that deal with URL strings.
- WebPage - This class implements the Gambas JSP-like dynamic html page.
Sesión
La sesión es el lugar donde guardar las variables globales, como el programa en producción residirá en el el directorio del servidor web, luego cuando un usuario se conecte a esta aplicación, automáticamente se iniciara la sesión en la que se colocaran los parámetros de dicha conexión al servicio web. Usuario, contraseña, y cualquier otro parámetro de cualquier tipo, ya que es Variant
Agregar o editar parámetros de una sesión
Código:
Sesion["usuario"] = "user1"
Sesion["password"] = "ushuaia"
Sesion["ciudad"] = "ushuaia"
Uso de cokies ??
Seguridad y control de acceso de la aplicación web ??
Problemas y soluciones- La web no se muestra en el navegador > Depuración / Configuración > Depurador / Usar el servidor HTTP incrustado = True
- La web sigue sin mostrarse en el navegador > Depuración / Configuración > Entorno / GB_HTTPD_PORT = 8082 (usar un puerto diferente de 8080)
- Los paneles no se expanden > Para ello hay que dar las propiedades H y W del contenedor en % [New]
- Donde se coloca el archivo CSS > .public/
- New Como se gestionan las sesiones de varios usuarios > Cada sesion sera una ejecución independiente, un proceso a parte. Es decir habrá tantos myweb.gambas corriendo en el servidor como sesiones exista.
- New La web no se ve en el navegador > Conviene ver el archivo log de Apache /var/log/apache2/error.log
- New Las imágenes no se muestran en la web > Hay que indicar el tamaño en px para la dimensión horizontal y para la vertical, por ejemplo 128px
Configuración del servidor Debian estable 11 (adaptación de la lista de Heberth )
- Actualizar el sistema
- Motor de bases de datos MySQL
- sudo apt-get install mysql-server
- Motor de bases de datos MariaDB
- sudo apt-get install mariadb-server
- Motor de bases de datos PosgreSQL
- sudo apt install postgresql postgresql-contrib
- Gambas3
- sudo apt update
- sudo apt -t bullseye-backports install gambas3-gb-web-gui
- Apache
- sudo apt install apache2
- Editar el archivo /etc/apache2/conf-available/serve-cgi-bin.conf > sudo nano /etc/apache2/conf-available/serve-cgi-bin.conf [1]
- Activar CGI en Apache2 > sudo a2enmod cgi
- sudo service apache2 restart / sudo systemctl restart apache2 / sudo systemctl start apache2
- Copiar el programa dentro del directorio del servidor
- cp /home/user/proyectoweb.gambas /usr/lib/cgi-bin/
- Cambia los permisos de la carpeta > sudo chmod +x -R /usr/lib/cgi-bin/
- Acceder a la web
Archivo log de Apache
Este archivo es transcendental al principio, cuando intentamos desplegar una app.gambas, pero seguramente luego también lo sea, pero es una corazonada.
Al copiar la
myweb.gambas en el directorio del servidor Apache y hacer todo "correctamente" la aplicación no funcionaba, así que recurrí al archivo log de apache y alli me decía que me faltaban instalar algunos componentes. Procedí a instalarlos y luego todo funciono.
[1]
Código:
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /var/www/cgi-bin
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi .py .gb
Require all granted
</Directory>
</IfDefine>
</IfModule>
Cómo instalar un servidor Linux, Apache, MySQL y PHP (LAMP) en Ubuntu 20.04
https://www.digitalocean.com/community/t...u-20-04-es
Cómo instalar PostgrSQL en Ubuntu 20.04
https://www.digitalocean.com/community/t...ckstart-es
Referencias