Toba SIU-Toba

Preguntas Frecuentes

Aquí es posible encontrar respuesta a problemas frecuentes encontrados durante la utilización de Toba. Si posee una pregunta no resuelta en este listado puede consultar la lista de usuarios

  1. Instalación
    1. ¿Cómo puedo ver la configuración actual de PHP?
    2. Al iniciar sesión retorna a la pantalla de login sin ningún mensaje
    3. ¿Cómo puedo cambiar el tiempo de duración de una sesión?
    4. ¿Cómo puedo publicar toba en un hosting compartido?
  2. Programación
    1. Acabo de borrar un componente ¿Puedo deshacer la eliminación?
    2. ¿Como puedo abrir una página en popup?
    3. ¿Qué son las constantes apex_pa_xx?
  3. Varias


Instalación

¿Cómo puedo ver la configuración actual de PHP?

Para resolver cualquier problema relacionado con la configuración del servidor apache-php es de mucha utilidad contar con una página phpinfo. Para construirla

  • Ubique la carpeta publicada de apache. En windows generalmente es C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs y en Debian /var/www
  • Abra un editor de texto e ingrese el siguiente código
    <?php
        phpinfo();
    ?>
    
  • Guarde como info.php dentro de la carpeta publicada de apache.
  • Navegue hacia  http://localhost/info.php y podrá visualizar la información de ejecución de Apache y PHP

Al iniciar sesión retorna a la pantalla de login sin ningún mensaje

Es posible que PHP no pueda almacenar la información de sesión en el disco porque no posee permisos sobre la carpeta o porque directamente no existe. Esto se puede dar luego de ejecutar algún programa que limpie los temporales (como ccleaner).

  • Primero debe averiguar cual es la carpeta que almacena esta información. Localice la ubicación del archivo php.ini que se está ejecutando. Si lo desconoce puede ver la configuración actual de php y encontrar el valor de la entrada Loaded Configuration File
  • Compruebe que el archivo php.ini indicado exista en la carpeta. Si no existe puede copiarlo desde la carpeta base de PHP.
  • Busque dentro del archivo php.ini la directiva session.save_path.
  • Si la misma está comentada, quitar el comentario (generalmente se utiliza un numeral '#' para comentar una línea)
  • Compruebe que la carpeta indicada en la directiva exista y que el usuario que ejecuta apache (www-data en Debian y Local Services en XP) tenga permisos de escritura sobre la misma. Para evitar futuros problemas asegúrese que la carpeta no sea eliminada por ningún otro programa.
  • Guarde el archivo php.ini y reinicie el servidor Apache.

¿Cómo puedo cambiar el tiempo de duración de una sesión?

La duración de una sesión es un mix de configuraciones de PHP y Toba, donde las primeras prevalecen sobre las segundas. Las sesiones en un sistema web generalmente se arman con cookies. El esquema es en pocas palabras así

  1. El servidor (php) le da una credencial al cliente (navegador), es un número llamado session_id que el cliente guarda en algo llamado cookie (una galletita que contiene adentro un secreto). Esto en toba se envia siempre, independiente si esta logueado o no
  2. El cliente cada vez que va a contactar al servidor le 'presenta' este número enviando su cookie
  3. El servidor confirma que el session_id es valido, atiende los eventos, arma la respuesta y sigue el ciclo

Este esquema tiene dos formas de 'caducar':

  • Cuando el servidor le da el session_id le dice cuanto puede durar. Este parámetro esta en la configuración  session.cookie_lifetime, por lo general se lo deja en cero que quiere decir hasta que cierre el navegador. Como es un parámetro que lee y manipula el cliente, no se puede confiar en él demasiado, es util por ejemplo para hacer que siga presentando la cookie aún cuando haya cerrado/abierto el navegador, con esto se logra el efecto 'Recordarme' en muchas páginas web.
  • El servidor mismo hace chequeos para caducar los session_id, sino correríamos riesgos de que el cliente nos presente una cookie de hace dos años y aceptemos la sesión. Para evitar esto PHP analiza cada session_id otorgado para ver cuanto tiempo tienen sin modificación, esta tolerancia es controlada por el parámetro  session.gc_maxlifetime. Como en definitiva en php los session_id se guarda uno por archivo, caducar la sesión implica borrar el archivo físicamente. Si se está utilizando debian, al menos hasta algunas versiones atrás, utilizaban un garbage collector propio para eliminar los session_id, con lo cual hay que tocar esta configuración en otro lado.

¿Porqué no alcanza el gc_maxlifetime? El problema es que esto borra sesiones en todo el servidor, si tengo dos sistemas en un mismo servidor con diferentes requerimientos de duración de la sesión no es posible hacerlo ya que las sesiones duraran el tiempo exacto que indica este parámetro. Para paliar esto Toba brinda configuraciones por proyecto, hay que ir a la solapa Login de las configuraciones del proyecto en el toba_editor

  • Sesión - Tope no interaccion: Por defecto sale vacío, es el tiempo de no interaccion cliente/servidor máximo. Si se supera esta ventana se elimina la sesion.
  • Sesión - Duracion máxima: Por defecto sale vacío, es el tiempo máximo que puede durar una sesión teniendo o no interacción el usuario. Generalmente este límite no es un requisito.

Estas configuraciones estan limitadas por las duraciones establecidas en el php.ini. Por ejemplo si tenemos 5 sistemas en un servidor con diferentes requisitos dejariamos gc_maxlifetime con el valor mas alto de las 5 y configuraríamos cada proyecto individualmente via Toba.

¿Cómo puedo publicar toba en un hosting compartido?

Hay muchas formas de hacerlo, a continuación la que se acerca más a cuando lo hacemos en una máquina máquina propia.

  • Asumiendo que toba y el proyecto se instalaron correctamente, ya sea mediante el comando instalar (recomendado) o manualmente, copiando y editando los archivos .ini de la carpeta instalacion, y generando la base mediante las herramientas del hosting.
  • Debemos publicar las carpetas www del proyecto. La forma más sencilla es contando con una conexión ssh y hacer links simbólicos:
    ln -s /home/usuario/TOBA/proyectos/PROYECTO/www /home/usuario/public_html/PROYECTO
    ln -s /home/usuario/TOBA/www /home/usuario/public_html/TOBA
    

En lo posible nunca dejar navegables las carpetas de toba ni del proyecto. Sino se puede cumplir con esto (el hosting publica todas las carpetas que subimos) deberíamos bloquear el acceso a todas las carpetas que no son www de toba o del proyecto. Como mínimo se debería bloquear al aceso a la carpeta toba/instalacion de toba que posee la información de seguridad más sensible. Una forma sencilla de bloquear el acceso a ciertos archivos es  usando .htaccess.

  • Creamos un archivo .htaccess en la carpeta www del proyecto conteniendo lo siguiente:
    SetEnv TOBA_DIR /home/usuario/toba
    SetEnv TOBA_INSTANCIA desarrollo
    DirectoryIndex aplicacion.php
    php_flag magic_quotes_gpc Off
    
    #Evitar que navegen los tags svn
    RedirectMatch 404 /\\.svn(/|$) 
    #Evitar que se muestren los archivos disponibles
    Options -Indexes
    
    
  • Creamos un archivo .htaccess similar en la carpeta www de toba conteniendo lo siguiente:
    RedirectMatch 404 /\\.svn(/|$)
    Options -Indexes
    

Si luego de esto no podemos navegar nuestro proyecto, comprobar que:

  • La directiva FollowSymLinks de Apache se encuentra activa (para cambiarla contactar servicio técnico del hosting)
  • La directiva AllowOverride de Apache se encuentra activa (para cambiarla contactar servicio técnico del hosting)

Programación

Acabo de borrar un componente ¿Puedo deshacer la eliminación?

No hay forma de hacerlo desde dentro del toba_editor. Existe un par de formas alternativas:

  • Si la eliminación fue el único cambio a metadatos realizado en el proyecto, es posible cargar los metadatos en base a lo existente en el sistema de archivo (toba proyecto regenerar) y todo volverá al estado de la regeneración anterior. Tener en cuenta que esto revierte cualquier cambio realizado, no sólo la eliminación.
  • Si se usa SVN y se conoce el id del componente:
    • Exportar el proyecto (toba proyecto exportar)
    • Identificar el archivo que representa al componente borrado (usar el id como base de la búsqueda)
    • Revertir la eliminación del archivo
    • Regenerar el proyecto (toba proyecto regenerar)

¿Como puedo abrir una página en popup?

Hay varias formas de abrir una página en popup, entre ellas podemos encontrar las siguientes:

  • Si no se requiere recuperar un valor, realizando una llamada a toba::vinculador()->get_url() se puede obtener un vínculo (link) para realizar la llamada. Pasando entre las opciones de la llamada el parametro param_html con la informacion necesaria para determinar el modo de apertura.
  • Si se requiere obtener un valor como respuesta entonces puede hacerse uso del ef_popup.

¿Qué son las constantes apex_pa_xx?

Las constantes apex_pa_xx permiten definir varios aspectos del funcionamiento de un proyecto en runtime. Entre las más comunes se encuentran las que listamos a continuación, agrupadas según aquello para lo que fueron definidas. Las mismas tienen precedencia sobre otros valores definidos tanto en archivos .ini (ej: proyecto.ini) como por medio del toba_editor en la operación de configuración de proyecto, por lo tanto si se quiere hacer override de algún valor particular se podría modificar mediante esta forma.

  • Relacionadas al entorno de Runtime
    • apex_pa_instancia: Nombre de la instancia en la que se esta trabajando.
    • apex_pa_proyecto: Contiene el identificador del proyecto toba que se esta ejecutando. Útil para poder diferenciar entre varios proyectos si es que se tiene un código común a todos.
    • apex_pa_toba_alias: Nombre del alias de toba dentro de la configuración del webserver, el mismo se utiliza para acceder al runtime toba.
  • Relacionadas a la Performance de Ejecución
    • apex_pa_metadatos_compilados: Especifica si se deben utilizar los metadatos exportados y convertidos a arreglos estáticos o si se deben obtener desde la base de datos mediante SQL. El primer método es más rápido pero cada cambio requiere una nueva compilación, el segundo método es mas dinámico en el comportamiento pero menos performante.
    • apex_pa_archivos_compilados: Especifica si los archivos de una operación se pre-parsean y se juntan dentro de un solo archivo físico. Hasta el momento no se ha observado una mejora sustancial de performance con este método.
  • Relacionadas a la Seguridad
    • apex_pa_nivel_acceso_item: Se refiere al nivel mínimo de permisos necesarios para ejecutar el item por parte de un usuario. Actualmente aún no se esta usando.
    • apex_pa_nivel_acceso_usuario: Se refiere al nivel mínimo de permisos necesarios para que el usuario pueda ejecutar un item particular. Actúa en tandem con la constante anterior, aunque actualmente no está utilizándose.
    • apex_pa_encriptar_qs: Especifica si el Query String debe ser encriptado o no, el seteo afecta a todo el proyecto.
    • apex_pa_validacion_debug: Especifica si se debe presentar un login con combos para el acceso rápido(desarrollo) o si se debe presentar un login con campos editables.
    • apex_pa_requiere_validacion: Especifica si el proyecto requiere de un proceso de autenticación de usuarios o no para su operacion.
  • Relacionadas a la Auditoría de Errores
    • apex_pa_log_archivo: Indica si se realizará un log en archivo en disco o únicamente en la base de datos.
    • apex_pa_log_archivo_nivel: Indica la cantidad de detalle que se enviará al archivo de log durante la ejecución de un proyecto. Va desde 1 (info) a 7 (debug).

Varias