gstreamer0.10-ffmpeg
gstreamer0.10-plugins-good
packages.
El primer paso para actualizar nuestra aplicación a Symfony 6 es actualizar todas las librerías de Symfony a la 5.4. Y... eso es bastante fácil: es sólo una cosa del compositor.
En composer.json
, tenemos bastantes librerías que empiezan por symfony/
. La mayoría de ellas forman parte del proyecto "principal" de Symfony y siguen el conocido versionado de Symfony, con versiones como 5.0, 5.1, hasta 5.4 y luego 6.0. Esos son los paquetes en los que nos vamos a centrar para actualizarlos.
Pero algunos de ellos, como symfony/maker-bundle
, siguen su propio esquema de versiones. ¡Qué diva! No vamos a preocuparnos de actualizarlos ahora, pero nos aseguraremos de que, al final, lo hayamos actualizado todo.
Bien, lo que tenemos que hacer es cambiar todos estos 5.0.*
por 5.4.*
. Voy a hacer un "Buscar y reemplazar" para sustituir 5.0.*
por 5.4.*
. Pulsa "Reemplazar todo".
{ | |
... lines 2 - 5 | |
"require": { | |
... lines 7 - 21 | |
"symfony/asset": "5.4.*", | |
"symfony/console": "5.4.*", | |
"symfony/dotenv": "5.4.*", | |
... line 25 | |
"symfony/form": "5.4.*", | |
"symfony/framework-bundle": "5.4.*", | |
... line 28 | |
"symfony/property-access": "5.4.*", | |
"symfony/property-info": "5.4.*", | |
"symfony/proxy-manager-bridge": "5.4.*", | |
"symfony/routing": "5.4.*", | |
"symfony/security-bundle": "5.4.*", | |
"symfony/serializer": "5.4.*", | |
"symfony/stopwatch": "5.4.*", | |
"symfony/twig-bundle": "5.4.*", | |
... line 37 | |
"symfony/validator": "5.4.*", | |
... lines 39 - 44 | |
}, | |
"require-dev": { | |
... line 47 | |
"symfony/debug-bundle": "5.4.*", | |
... lines 49 - 51 | |
"symfony/web-profiler-bundle": "5.4.*", | |
... line 53 | |
}, | |
... lines 55 - 100 | |
"extra": { | |
"symfony": { | |
"allow-contrib": false, | |
"require": "5.4.*" | |
} | |
} | |
} |
¡Muy bien! Y fíjate que, además de los paquetes en sí, también hemos tenido que cambiar la clave extra.symfony.require
. Se trata de una optimización del rendimiento de Flex: básicamente se asegura de que Flex sólo tenga en cuenta los paquetes de Symfony que coincidan con esta versión. Sólo tienes que asegurarte de no olvidarte de actualizarla.
Bien... veamos. Esto actualizó un montón de bibliotecas. Para asegurarnos de que no nos hemos perdido nada, busca symfony/
... y desplázate un poco hacia abajo. El monolog-bundle
tiene su propio versionado, así que está bien. Pero, ooh... me he perdido una: symfony/routing
. Por alguna razón, ésta ya estaba en Symfony 5.1. Así que vamos a cambiarlo también a 5.4.*
.
Y... todo lo demás parece estar bien: cada uno se cambia a 5.4.*
o tiene su propia estrategia de versionado... y no vamos a preocuparnos por ello ahora.
Para actualizarlas realmente, en tu terminal, podríamos intentar actualizar sólo los paquetes de Symfony con:
composer up 'symfony/*'
Es muy probable que eso falle... porque para actualizar todos los paquetes de Symfony, habrá que actualizar algún otro paquete, comosymfony/proxy-manager-bridge
. Si quisieras, podrías añadir eso al comandocomposer up
... o añadir la bandera -W
, que indica a Composer que actualice todas las bibliotecas de symfony/
y sus dependencias.
Pero... Yo voy a actualizar todo con:
composer up
Mira: en nuestro archivo composer.json
, las restricciones de versión de todos los paquetes (Symfony y otras bibliotecas) son realmente buenas Permiten actualizaciones de versiones menores, como de la 4.0 a la 4.1, pero no permiten actualizaciones de versiones mayores. Así que si hubiera una nueva versión 5 de esta biblioteca, al ejecutar composer up
no se actualizaría a esa nueva versión mayor.
En otras palabras, la actualización sólo debería actualizar las versiones menores... y éstas, en teoría, no contendrán ninguna ruptura. Así que hagamos esto:
composer up
Y... ¡hola actualizaciones! ¡Vaya! ¡Mira qué lista tan grande! Muchas cosas de Symfony... pero también muchas otras librerías.
Vale, así que ha sido una gran actualización. ¿Sigue funcionando el sitio? No lo sé Dirígete, actualiza y... ¡funciona! ¡Symfony es increíble!
Ahora que estamos en Symfony 5.4, podemos ver la lista completa de rutas de código obsoletas que encontramos al renderizar esta página. Tu número variará... y el número puede incluso cambiar cuando actualices la página... eso se debe a que algunas páginas utilizan la caché. Parece que tengo unas 71 depreciaciones.
Si haces clic en esto, genial. Podemos ver cuáles son todas ellas.
Así que en este punto, nuestro trabajo es sencillo... pero no necesariamente fácil. Tenemos que buscar cada una de estas desaprobaciones, averiguar qué código hay que cambiar, y luego hacer ese cambio. Algunas serán bastante obvias... y otras no.
Así que, antes de intentar buscarlas manualmente, vamos a hacer algo más automático. Somos programadores, ¿verdad? Utilicemos una herramienta llamada Rector para automatizar todos los cambios posibles en nuestro código. Eso es lo siguiente.
Hey Mepcuk,
That's unexpected, could you try clearing the cache manually? rm var/cache/*
Cheers!
Right! I forgot about the recursive flag. Anyway, I'm glad to hear that it fixed your problem :)
Hi
When I run compose rup on my main machine (iMac) I get the following message.
The "symfony/flex" plugin (installed globally) was skipped because it requires a Plugin API version ("^1.0") that does not match your Composer installation ("2.2.0"). You may need to run composer update with the "--no-plugins" option.
When first getting in to using flex I must have somehow installed it globally. (I can see /usr/bin/flex and /usr/bin/flex++) not sure if these are the files though
Is there a way to remove flex globally and thus the error?
Thank you
Steve
Hey Steve D.!
Yup - I agree with your assessment! You should be able to remove it by running composer global remove symfony/flex
.
Let me know if that does the trick :).
Cheers!
Hi,
Great videos, Ryan.
During a composer recipes:update and getting back the following list: <br /> [0 ] liip/imagine-bundle<br /> [1 ] stof/doctrine-extensions-bundle<br /> [2 ] symfony/apache-pack<br /> [3 ] symfony/flex<br /> [4 ] symfony/monolog-bundle<br /> [5 ] symfony/phpunit-bridge<br /> [6 ] symfony/routing<br /> [7 ] symfony/security-bundle<br /> [8 ] symfony/swiftmailer-bundle<br /> [9 ] symfony/translation<br /> [10] symfony/validator<br /> [11] symfony/web-profiler-bundle<br /> [12] symfony/webpack-encore-bundle<br />
I typed 1 to update stof/doctrine-extensions-bundle
and I get the following error:
`
PHP Fatal error: Uncaught TypeError: Argument 1 passed to Symfony\Flex\Command\UpdateRecipesCommand::getRecipe() must be an instance of Composer\Package\Package, instance of Composer\Package\CompleteAliasPackage given, called in /private/var/www/www.site.com/vendor/symfony/flex/src/Command/UpdateRecipesCommand.php on line 128 and defined in /private/var/www/www.site.com/vendor/symfony/flex/src/Command/UpdateRecipesCommand.php:265
Stack trace:
#0 /private/var/www/www.site.com/vendor/symfony/flex/src/Command/UpdateRecipesCommand.php(128): Symfony\Flex\Command\UpdateRecipesCommand->getRecipe(Object(Composer\Package\CompleteAliasPackage), '6c1ceb662f89970...', '1.2')
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.php(245): Symfony\Flex\Command\UpdateRecipesCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Application.php(835): Symfony\Component\Console\Command\ in /private/var/www/www.site.com/vendor/symfony/flex/src/Command/UpdateRecipesCommand.php on line 265
Fatal error: Uncaught TypeError: Argument 1 passed to Symfony\Flex\Command\UpdateRecipesCommand::getRecipe() must be an instance of Composer\Package\Package, instance of Composer\Package\CompleteAliasPackage given, called in /private/var/www/www.site.com/vendor/symfony/flex/src/Command/UpdateRecipesCommand.php on line 128 and defined in /private/var/www/www.site.com/vendor/symfony/flex/src/Command/UpdateRecipesCommand.php:265
Stack trace:
#0 /private/var/www/www.site.com/vendor/symfony/flex/src/Command/UpdateRecipesCommand.php(128): Symfony\Flex\Command\UpdateRecipesCommand->getRecipe(Object(Composer\Package\CompleteAliasPackage), '6c1ceb662f89970...', '1.2')
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.php(245): Symfony\Flex\Command\UpdateRecipesCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Application.php(835): Symfony\Component\Console\Command\ in /private/var/www/www.site.com/vendor/symfony/flex/src/Command/UpdateRecipesCommand.php on line 265
`
composer.json (partial)
`
"require": {
"php": "^7.1.3",
"ext-ctype": "*",
"ext-iconv": "*",
"behat/transliterator": "~1.2",
"doctrine/cache": "~1.6",
"doctrine/collections": "~1.4",
"doctrine/common": "^3.0",
"doctrine/data-fixtures": "~1.3",
"doctrine/dbal": "^2.6",
"doctrine/doctrine-bundle": "^2.4",
"doctrine/doctrine-migrations-bundle": "^3.0",
"doctrine/inflector": "^1.2",
"doctrine/migrations": "^3.0",
"doctrine/orm": "^2.9",
"fig/link-util": "^1.1",
"gedmo/doctrine-extensions": "^3.1",
"guzzlehttp/guzzle": "^7.3",
"incenteev/composer-parameter-handler": "~2.1.1",
"jms/metadata": "^2.4.0",
"jms/serializer": "^3.14",
"jms/serializer-bundle": "^3.10",
"knplabs/knp-components": "2.4.0",
"knplabs/knp-paginator-bundle": "dev-master",
"liip/imagine-bundle": "2.x-dev",
"monolog/monolog": "^1.22",
"phpcollection/phpcollection": "0.4.0",
"ramsey/uuid": "3.8.0",
"sensio/framework-extra-bundle": "~5.2",
"stfalcon/tinymce-bundle": "^3.0.0",
"stof/doctrine-extensions-bundle": "^1.7",
"symfony/apache-pack": "^1.0",
"symfony/asset": "5.4.*",
"symfony/cache": "5.4.*",
"symfony/config": "5.4.*",
"symfony/console": "5.4.*",
"symfony/dependency-injection": "5.4.*",
"symfony/doctrine-bridge": "5.4.*",
"symfony/dotenv": "5.4.*",
"symfony/event-dispatcher": "5.4.*",
"symfony/expression-language": "5.4.*",
"symfony/flex": "^1.2",
"symfony/form": "5.4.*",
"symfony/framework-bundle": "5.4.*",
"symfony/http-foundation": "5.4.*",
"symfony/http-kernel": "5.4.*",
"symfony/lock": "5.4.*",
"symfony/mime": "5.4.*",
"symfony/monolog-bridge": "5.4.*",
"symfony/monolog-bundle": "^3.3",
"symfony/options-resolver": "5.4.*",
"symfony/property-access": "5.4.*",
"symfony/property-info": "5.4.*",
"symfony/rate-limiter": "5.4.*",
"symfony/routing": "5.4.*",
"symfony/runtime": "5.4.x-dev",
"symfony/security-bundle": "5.4.*",
"symfony/security-core": "5.4.*",
"symfony/security-csrf": "5.4.*",
"symfony/security-guard": "5.4.*",
"symfony/security-http": "5.4.*",
"symfony/serializer": "5.4.*",
"symfony/string": "5.4.*",
"symfony/swiftmailer-bundle": "^3.2",
"symfony/translation": "*",
"symfony/twig-bridge": "5.4.*",
"symfony/twig-bundle": "5.4.*",
"symfony/validator": "5.4.*",
"symfony/web-link": "4.4.*",
"symfony/web-profiler-bundle": "5.4.*",
"symfony/webpack-encore-bundle": "^1.1",
"symfony/yaml": "*",
"tattali/mobile-detect-bundle": "2.2.0",
"twig/twig": "^3.0",
"vich/uploader-bundle": "^1.18",
"vwo/vwo-php-sdk": "dev-master"
},
`
It's not just this package, it's also monolog-bundle
Would love your input/suggestions on how to tackle this one.
Thanks,
Kevin
The rector.php file generated is completely different from the one in the tutorial, and also the rector github docs. I guess they updated rector in the meantime?
// composer.json
{
"require": {
"php": "^8.0.2",
"ext-ctype": "*",
"ext-iconv": "*",
"babdev/pagerfanta-bundle": "^3.6", // v3.6.1
"composer/package-versions-deprecated": "^1.11", // 1.11.99.5
"doctrine/annotations": "^1.13", // 1.13.2
"doctrine/dbal": "^3.3", // 3.3.5
"doctrine/doctrine-bundle": "^2.0", // 2.6.2
"doctrine/doctrine-migrations-bundle": "^3.2", // 3.2.2
"doctrine/orm": "^2.0", // 2.11.2
"knplabs/knp-markdown-bundle": "^1.8", // 1.10.0
"knplabs/knp-time-bundle": "^1.18", // v1.18.0
"pagerfanta/doctrine-orm-adapter": "^3.6", // v3.6.1
"pagerfanta/twig": "^3.6", // v3.6.1
"sensio/framework-extra-bundle": "^6.0", // v6.2.6
"sentry/sentry-symfony": "^4.0", // 4.2.8
"stof/doctrine-extensions-bundle": "^1.5", // v1.7.0
"symfony/asset": "6.0.*", // v6.0.7
"symfony/console": "6.0.*", // v6.0.7
"symfony/dotenv": "6.0.*", // v6.0.5
"symfony/flex": "^2.1", // v2.1.7
"symfony/form": "6.0.*", // v6.0.7
"symfony/framework-bundle": "6.0.*", // v6.0.7
"symfony/mailer": "6.0.*", // v6.0.5
"symfony/monolog-bundle": "^3.0", // v3.7.1
"symfony/property-access": "6.0.*", // v6.0.7
"symfony/property-info": "6.0.*", // v6.0.7
"symfony/proxy-manager-bridge": "6.0.*", // v6.0.6
"symfony/routing": "6.0.*", // v6.0.5
"symfony/runtime": "6.0.*", // v6.0.7
"symfony/security-bundle": "6.0.*", // v6.0.5
"symfony/serializer": "6.0.*", // v6.0.7
"symfony/stopwatch": "6.0.*", // v6.0.5
"symfony/twig-bundle": "6.0.*", // v6.0.3
"symfony/ux-chartjs": "^2.0", // v2.1.0
"symfony/validator": "6.0.*", // v6.0.7
"symfony/webpack-encore-bundle": "^1.7", // v1.14.0
"symfony/yaml": "6.0.*", // v6.0.3
"symfonycasts/verify-email-bundle": "^1.7", // v1.10.0
"twig/extra-bundle": "^2.12|^3.0", // v3.3.8
"twig/string-extra": "^3.3", // v3.3.5
"twig/twig": "^2.12|^3.0" // v3.3.10
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.4", // 3.4.1
"phpunit/phpunit": "^9.5", // 9.5.20
"rector/rector": "^0.12.17", // 0.12.20
"symfony/debug-bundle": "6.0.*", // v6.0.3
"symfony/maker-bundle": "^1.15", // v1.38.0
"symfony/var-dumper": "6.0.*", // v6.0.6
"symfony/web-profiler-bundle": "6.0.*", // v6.0.6
"zenstruck/foundry": "^1.16" // v1.18.0
}
}
During
composer up
get error