Pasar al contenido principal
Imagen
Drupal error Translations and invalid arguments
LEVEL
FÁCIL

Error al activar un modulo en Drupal 9 - Translations and invalid arguments of type resource

Me levanto por la mañana, me preparo un buen café e instalo un módulo BOOM! No me lo puedo creer, ya empezamos con un error que no se a cuento ni de que viene...

 

  TypeError: fgets(): Argument #1 ($stream) must be of type resource, bool given in fgets() (line 248 of /var/www/htm  
  l/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php).     

 

Dirás, pues tampoco parece tanto, pero claro, la consola te lo saca de esta manera, y seguramente a más de uno le ha dado un microinfarto al verlo...

 

image-20220518130125-1

No es la primera vez que me salta este error al habilitar un modulo de Drupal, pero, ¿Cuál es el motivo? y ¿Cómo podemos solucionarlo?. La verdad es que los motivos pueden ser varios, pero siempre va a ir orientado a o bien acceso a carpetas, permisos de archivos, ubicaciones establecidas de las carpetas tanto temporales como de translations. En esta ocasión el error era el siguiente (no lo he incluido todo)..

srvazquez@Desktop:~/Projects/vazcell$ ddev drush en field_permissions
>  [notice] Checked es translation for field_permissions.
>  [error]  The specified file 'temporary://file74h1sh' could not be copied because the destination directory 'translations://' is not properly configured. This may be caused by a problem with file or directory permissions. 
>  [error]  Unable to download translation file https://ftp.drupal.org/files/translations/all/field_permissions/field_permissions-8.x-1.1.es.po. 
>  [warning] fopen(translations://field_permissions-8.x-1.1.es.po): Failed to open stream: "Drupal\locale\StreamWrapper\TranslationsStream::stream_open" call failed PoStreamReader.php:154
>  [error]  TypeError: fgets(): Argument #1 ($stream) must be of type resource, bool given in fgets() (line 248 of /var/www/html/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php) #0 /var/www/html/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php(248): fgets(false)
> #1 /var/www/html/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php(186): Drupal\Component\Gettext\PoStreamReader->readLine()
> #2 /var/www/html/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php(217): Drupal\Component\Gettext\PoStreamReader->readItem()
> #3 /var/www/html/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php(155): Drupal\Component\Gettext\PoStreamReader->readHeader()
> #4 /var/www/html/web/core/modules/locale/src/Gettext.php(56): Drupal\Component\Gettext\PoStreamReader->open()
> #5 /var/www/html/web/core/modules/locale/locale.bulk.inc(213): Drupal\locale\Gettext::fileToDatabase(Object(stdClass), Array)
> #6 /var/www/html/web/core/modules/locale/locale.batch.inc(191): locale_translate_batch_import(Object(stdClass), Array, Object(DrushBatchContext))
> #7 /var/www/html/vendor/drush/drush/includes/batch.inc(261): locale_translation_batch_fetch_import('field_permissio...', 'es', Array, Object(DrushBatchContext))
> #8 /var/www/html/vendor/drush/drush/includes/batch.inc(206): _drush_batch_worker()
> #9 /var/www/html/vendor/drush/drush/includes/batch.inc(100): _drush_batch_command('48')
> #10 /var/www/html/vendor/drush/drush/src/Drupal/Commands/core/BatchCommands.php(22): drush_batch_command('48')
> #11 [internal function]: Drush\Drupal\Commands\core\BatchCommands->process('48', Array)
> #12 /var/www/html/vendor/consolidation/annotated-command/src/CommandProcessor.php(257): call_user_func_array(Array, Array)

 

En mi caso, este error está relacionado con el sistema de traducciones en el cual se puede ver si seguimos leyendo el error hasta llegar al siguiente punto..

>  [error]  The specified file 'temporary://file74h1sh' could not be copied because the destination directory 'translations://' is not properly configured. This may be caused by a problem with file or directory permissions. 

 

Pues bien el error es muy sencillo de solucionar. Nos tenemos que fijar en varias cosas:

  • Carpeta translations: No es la primera vez que por un error la carpeta translations no está disponible y Drupal no tiene los privilegios como para poder crearla, a veces simplemente creándola en nuestro sistema y confirmando que todo funciona correctamente es suficiente para resolver el problema.
  • Permisos: A veces algo tan sencillo como tener los permisos en orden puede llevarnos más de un disgusto. Accedemos a la ruta en nuestro servidor /web/sites/default/files/translations y confirmamos que tanto el dueño/grupo como el acceso a la carpeta está permitido y correcto.
  • Configuración del Sistema de archivos: En mi caso algo tan sencillo como acceder al sistema de archivos y guardar la configuración resolvía dicho fallo ya que creaba los archivos faltantes para que todo fuera como es debido. Para confirmarlo accederemos a la siguiente ruta desde el panel de administración.  SITE_URL/admin/config/media/file-system .

Si al entrar al file system observamos que la carpeta no es la correcta deberemos cambiarla a una que sea accesible desde nuestro entorno Drupal.

 

Una vez realizado todos estos pasos deberiamos tener nuestro Drupal funcionando correctamente. Para confirmarlo podremos "desinstalar" el módulo y volver a instalarlos observando que, ahora sí, las traducciones se han descargado correctamente y todo ha ido fluído.

Profile picture for user cms-sys-admin
Adrian Vazquez Peligero
Technical Product Owner and Senior Drupal Developer