Saltar al contenido principal
Version: Pro7

Guía para Migrar a Pro7.1 o Superior

Accesos Rápidos

Cambios en Laravel

Conoce las actualizaciones principales del framework y requerimientos de PHP 8.

Script de Actualización

Utiliza el script automático para migrar tu sistema de forma rápida y segura.

Actualización Manual

Sigue el proceso paso a paso si prefieres realizar la actualización manualmente.

Tablas de Dependencias

Revisa todas las librerías actualizadas y sus nuevas versiones.

Cambios en Dependencias y Versiones de Laravel Pro7

⚠️ IMPORTANTE:
Se ha realizado una actualización mayor del Pro7, migrando la base de código desde Laravel 5.7 a Laravel 9.x, con un requerimiento mínimo de PHP 8. Además, se han actualizado la mayoría de las dependencias y librerías para garantizar compatibilidad con las versiones más recientes de Laravel y Symfony.

Esta actualización implica cambios profundos en el core del sistema. Aunque se ha realizado una validación completa y las pruebas no han mostrado errores, recomendamos ser cuidadoso y validar las funciones críticas de su flujo de trabajo en un entorno de pruebas antes de actualizar en producción.

En caso de detectar cualquier incidencia, incompatibilidad o comportamiento inesperado, por favor repórtelo lo más rápido posible para obtener soporte y una solución inmediata.

Upgrade mayor: Laravel 5.7 → 9.x.

PHP: de 7.1.3 a PHP 8 mínimo.

Librerías: la mayoría actualizadas a versiones compatibles con Laravel 9/Symfony 6.

Paquetes reemplazados:

barryvdh/laravel-corsfruitcake/laravel-cors

fzaninotto/fakerfakerphp/faker

Paquetes nuevos: laravel/ui, laravel/sail.

Estructura de autoload: migrada de classmap → PSR-4 con Database\Factories y Database\Seeders.


Cambios en General de Laravel

PaqueteAntesDespuésActualización¿Para qué sirve?
laravel/framework5.7.*^8.0ActualizadoEl framework Laravel en sí (MVC, routing, ORM, etc.) para crear apps.
php^7.1.3^8.0Laravel 9 exige PHP 8.0Lenguaje base requerido

Cambios en dependencias de Laravel

PaqueteAntesDespuésActualización¿Para qué sirve?
barryvdh/laravel-dompdf^0.8.4^2.0ActualizadoGenerar PDFs desde vistas Blade/HTML
barryvdh/laravel-cors^0.11.3N/AReemplazadoMiddleware CORS (Cross-Origin Resource Sharing)
fruitcake/laravel-corsN/A^2.0.5NuevoMiddleware CORS oficial en Laravel 7+
binarytorch/larecipe^2.4^2.6ActualizadoGenera documentación tipo Docs UI para Laravel
graham-campbell/markdown^11.2^13.0ActualizadoRenderizar Markdown a HTML con facilidad
guzzlehttp/guzzle^6.0^7.2ActualizadoCliente HTTP para consumir APIs
hyn/multi-tenant5.*^5.8ActualizadoManejo de multi-tenancy (multi-clientes) en Laravel
ifsnop/mysqldump-php^2.9^2.11ActualizadoGenerar backups SQL programáticamente
intervention/image^2.5^2.7ActualizadoManipulación de imágenes (resize, crop, filtros)
jenssegers/agent^2.6^3.6ActualizadoDetecta dispositivo/navegador/sistema operativo
laravel/tinker^1.0^2.7ActualizadoConsola interactiva REPL para Laravel
laravelcollective/html^5.4.0^6.2ActualizadoHelpers para formularios y HTML en Laravel
mercadopago/dx-php2.0.0^2.5ActualizadoSDK oficial de Mercadopago
mpdf/mpdf^8.0.0^8.1.13ActualizadoGeneración avanzada de PDFs desde HTML
mpride/qrcode^1.0^1.2ActualizadoGenerar códigos QR dentro de PDFs
nwidart/laravel-modules^5.0^9.0ActualizadoModulariza y organiza Laravel en módulos independientes
picqer/php-barcode-generator^2.0^2.2ActualizadoGeneración de códigos de barras
rap2hpoutre/laravel-log-viewer^1.3^2.2ActualizadoVisualizar logs desde el navegador
robrichards/xmlseclibs3.0.*^3.1ActualizadoSeguridad y firmas digitales XML
setasign/fpdi^1.8.*^1.8Operación modernizadaGeneración de PDFs básica
setasign/fpdf^2.0^2.3ActualizadoImportar y manipular PDFs existentes
stevebauman/location^6.3^6.6ActualizadoDetecta la ubicación geográfica por IP
symfony/process^4.4^6.2ActualizadoEjecuta comandos/procesos en el servidor
thiagoalessio/tesseract-ocr^2.7^2.9ActualizadoInterfaz Tesseract (extraer texto de imágenes)
zanysoft/laravel-zip^1.0^2.0ActualizadoManejo de archivos ZIP en Laravel
laravel/uiN/A^4.0NuevoScaffolding de la interfaz (Bootstrap/Vue/etc.)

Cambios en dependencias de Desarrollo y Testing en Laravel

PaqueteAntesDespuésActualización¿Para qué sirve?
fzaninotto/faker^1.4N/AReemplazadoGeneración de datos falsos (faker clásico, abandonado)
fakerphp/fakerN/A^1.9.1NuevoReemplazo oficial de Faker para Laravel 8/9
phpunit/phpunit^7.0^9.5.10ActualizadoFramework de testing unitario
nunomaduro/collision^2.0^6.1ActualizadoMejora errores en CLI con mensajes claros
laravel/dusk^4.0^7.0ActualizadoTesting de navegadores web con automatización
barryvdh/laravel-debugbar^3.2.3^3.6ActualizadoBarra de debug visual en el navegador
filp/whoops^2.0^2.14ActualizadoPantallas de error con stacktrace bonito
mockery/mockery^1.0^1.4.4ActualizadoFramework de mocks para testing
laravel/sailN/A^1.0.1NuevoEntorno Docker oficial de Laravel

Actualización de dependencias

Ingresar como usuario root, nos dirigimos a la carpeta del servicio y cambiamos a la rama de actualización con el siguiente comando:

git checkout -b v7.1 origin/v7.1

NOTA: Si hay cambios en el storage que le impide el cambio de rama puede ejecutar: git checkout -- storage/app/public/skins/*.css

Script de Actualización

Verificar si se encuentra el script upgrade-script.sh dentro del proyecto y darle permisos necesarios con el siguiente comando:

chmod +x upgrade-script.sh

NOTA: Verificar el número de servicio de los contenedores fpm y mariadb dentro del archivo docker-compose.yml dentro del proyecto, también es importante tener la contraseña root de la base de datos la puede encontrar el .env.

Ejecutamos el script con el comando ./upgrade-script.sh e ingresamos el número del servicio y la contraseña root de la base de datos.

Finalmente actualizará su sistema.

Comandos para actualizar

Detenemos los contenedores con el comando:

docker compose down

Entramos al archivo docker-compose.yml y actualizamos las imágenes:

rash07/php-fpm:2.0rash07/php-fpm:8.2

rash07/schedulingrash07/scheduling:8.2

rash07/php7.4-supervisorrash07/supervisor-php:8.2

Levantamos los contenedores con las imágenes actualizadas con el comando:

docker compose up -d

Ingresamos al contenedor fpm con el comando:

docker exec -it <CONTAINER_FPM> bash

Dentro del contenedor fpm borramos las siguientes carpetas con el comando:

rm -rf vendor node_modules composer.lock package-lock.json

Dentro del contenedor fpm instalamos las nuevas dependencias con el comando:

composer install

Dentro del contenedor fpm otorgamos permisos con los siguientes comandos:

mkdir -p bootstrap/cache
mkdir -p storage/framework/{cache,sessions,testing,views}
chown -R www-data:www-data storage bootstrap/cache
chmod -R 775 storage bootstrap/cache

Dentro del contenedor fpm ejecutamos el comando:

composer dump-autoload

Ingresamos al contenedor mariadb con el comando:

docker exec -it <CONTAINER_MARIADB> bash

Dentro del contenedor mariadb iniciamos sesión root en la base de datos con el comando:

mysql -u root -p

Dentro del contenedor mariadb ingresamos a la base datos mysql con este comando:

USE mysql;

Dentro del contenedor mariadb en la base de datos mysql ingresamos la siguiente función:

DELIMITER $$

CREATE PROCEDURE drop_tenancy_users()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE username VARCHAR(100);
DECLARE userhost VARCHAR(100);
DECLARE cur CURSOR FOR
SELECT User, Host FROM mysql.user WHERE User LIKE 'tenancy_%';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

read_loop: LOOP
FETCH cur INTO username, userhost;
IF done THEN
LEAVE read_loop;
END IF;
SET @s = CONCAT('DROP USER IF EXISTS `', username, '`@`', userhost, '`;');
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;

CLOSE cur;
END$$

DELIMITER ;

Dentro del contenedor mariadb ejecutamos la función con el siguiente comando:

CALL drop_tenancy_users();

Dentro del contenedor mariadb borramos la función utilizada con el siguiente comando:

DROP PROCEDURE drop_tenancy_users;

Dentro del contenedor mariadb ejecutamos el comando:

FLUSH PRIVILEGES;

Ingresamos al contenedor fpm con el comando:

docker exec -it <CONTAINER_FPM> bash

Dentro del contenedor fpm refrescamos las contraseñas y user tenancy con el comando:

php artisan passwords

Dentro del contenedor fpm recreamos las bases de datos tenancy con el comando:

php artisan tenancy:recreate

Dentro del contenedor fpm optimizamos con el siguiente comando:

php artisan optimize:clear

Dentro del contenedor fpm otorgamos permisos con el siguiente comando:

chmod -R 777 vendor/mpdf

Finalmente el sistema está actualizado.