Comunidad Gambas-es
Web con gambas, a ver si entre todos lo logramos - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: WebApp/WebForms (https://gambas-es.org/forum-23.html)
+--- Tema: Web con gambas, a ver si entre todos lo logramos (/thread-605.html)

Páginas: 1 2 3 4


Web con gambas, a ver si entre todos lo logramos - tincho - 14-09-2021

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
[Imagen: RAaauEp.png]

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_de_transferencia_de_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
    • sudo apt update
  • 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/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-20-04-es
Cómo instalar PostgrSQL en Ubuntu 20.04
https://www.digitalocean.com/community/tutorials/how-to-install-postgresql-on-ubuntu-20-04-quickstart-es
Referencias


RE: Web con gambas, a ver si entre todos lo logramos - tincho - 14-09-2021

Primer problema
[Imagen: KmVywkK.png]
Esto aparece luego de algunos intentos de ejecutar la pagina, no hay forma de renderizar la pagina otra vez, hay que salir de la sesión y volver a entrar para que todo funcione otra vez. ¿A que se deberá?

En la consola sale esto otro:
Cita:gb.httpd: bind :: - Address already in use
gb.httpd: bind 0.0.0.0 - Address already in use
[SOLUCIONADO]
Me respondo a mi mismo Smile. El problema se debe a que quedo un proceso escuchando en el puerto 8080 que es el puerto por defecto del servidor httpd de gambas así que cambiando la variable de entorno del programa GB_HTTPD_PORT = 8081, por ejemplo, ya vuelve a funcionar.

Saludos.


RE: Web con gambas, a ver si entre todos lo logramos - tincho - 15-09-2021

Hola.
Ahora estoy echando un vistazo a WebSiteTest, de David Müller
Luego de dar vueltas un rato logre ingresar usuario y contraseña ya que no es muy intuitivo.
[Imagen: pGd0DGQ.png]
Así que voy a intentar entender como maneja este programa las sesiones para permitir y manejar múltiples usuarios en la misma aplicación.
Si alguien sabe como hacerlo y puede proveer un ejemplo seria de gran ayuda.
Saludos.


RE: Web con gambas, a ver si entre todos lo logramos - Shordi - 15-09-2021

Sorry, yo de eso ni pajolera idea... Confused Confused


RE: Web con gambas, a ver si entre todos lo logramos - tincho - 15-09-2021

(15-09-2021, 17:17)Shordi escribió: Sorry, yo de eso ni pajolera idea...

Jeje, yo tampoco pero al final es gambas no?
Solo les comento que existe este programa y que se puede descargar desde la granja para estudiarlo, porque creo que mientras seamos los que le echemos un vistazo a este programa mejor.
Saludos.


RE: Web con gambas, a ver si entre todos lo logramos - Shordi - 15-09-2021

Sí, pero el tema de los cgi, configuraciones de apache, carga de módulos del mismo, seguridad web, etc... se me escapa mucho.


RE: Web con gambas, a ver si entre todos lo logramos - tercoide - 15-09-2021

no tengo ni la mas remota idea del tema!


RE: Web con gambas, a ver si entre todos lo logramos - tincho - 15-09-2021

(15-09-2021, 19:00)Shordi escribió: Sí, pero el tema de los cgi, configuraciones de apache, carga de módulos del mismo, seguridad web, etc... se me escapa mucho.

A eso no llegue todavía, lo de ahora se trata de extraer información útil desde estos programas de ejemplo. Ademas seguro que si le echas un vistazo al programa de ejemplo de David lo sacas a la primera, a que si? Smile
  • Ahora el objetivo a corto plazo es lograr manejar las sesiones, luego seguimos con el resto.
  • El objetivo a largo plazo es lograr una aplicación web que permita a varios usuarios trabajar sobre la misma aplicación web.
Saludos.

(15-09-2021, 19:37)tercoide escribió: no tengo ni la mas remota idea del tema!

Si abrís el programa de ejemplo de David Muler vas a poder seguir bastante el código porque no hay ni html ni javascript ni nada de eso son webforms.
Si lo ejecutas desde el IDE, este, el ide, ya tiene un servidor embebido para lanzar el servidor web y ves la app desde el navegador.
Saludos.


RE: Web con gambas, a ver si entre todos lo logramos - tincho - 24-09-2021

Hola amigos.
¿Alguien tiene un ejemplo de como hacer un login en el sistema, en una web hecha en gambas?
Saludos.


RE: Web con gambas, a ver si entre todos lo logramos - Shordi - 24-09-2021

No. Sorry. En eso de la gambas-web es una de las pocas cosas en las que aún soy virgen... Angel Angel

Pero creo recordar que el código del gambas wiki o el del bugtracker, no recuerdo cual, estaba disponible en el gitlab...