DC

Instalar Drupal localmente, DEVEL module y generar datos de prueba (mock data)

enero 14, 2025

En esta entrada vamos a ver como instalar Drupal de manera local, usando Docker, DDEV, y como generar datos aleatorios para nuestros contenidos usando DEVEL module.

Como Instalar Drupal localmente.

1 – Instalar Docker Sitio oficial de Docker

2 – Debemos configurar Docker para funcionar sin necesidad de ser usuario root Sitio oficial de Docker

3 – Instalar DDEV Sitio oficial de DDEV

4 – Debemos clonar el repositorio oficial de Drupal. Y entramos en la carpeta creada.

git clone https://git.drupalcode.org/project/drupal.git
cd drupal
ls

5 – Ahora dentro de la carpeta donde se descargo Drupal vamos a configurar DDEV.

ddev config --project-type drupal
ddev start

6 – Ahora utilizando composer, vamos a instalar todo lo que Drupal necesita.

ddev composer install

7 – Ahora vamos a instalar Drush. Drush es un recopialtorio de scripts que nos sirve para borrar cache, instalar y desinstalar modules, themes y muchas otras cosas mas link para mas informacion sobre Drush click aqui. Una vez instalado, vamos a borrar cache y luego lanzar nuestro sitio.

ddev composer require drush/drush
ddev drush cr
ddev launch

8 – Nuestro sitio deberia abrirse automaticamente en nuestro navegador por defecto, en mi caso se abrio en Firefox. Elegimos el idioma que queremos.

9 – Elegimos “Standard”.

10 – Damos siguiente, avanzamos en todas las opciones, rellenamos los campos necesarios.

11 – Ponemos el nombre de nuestro sitio y datos de contacto y de admin.


12 – Listo! Nuestro sitio Drupal esta instalado correctamente. Deberia habernos redirigido a la pantalla de inicio.


Ya tenemos nuestro sitio Drupal funcionando. Ahora vamos a crear nuestra primer pagina.

1 – Para eso vamos a “Content” arriba a la izquierda de nuestra pantalla.

2 – En la pagina donde se muestran todos nuestros contenidos, le damos a “+ Add Content”.

3 – Elegimos el tipo de contenido, en mi caso voy a elegir “Basic page”.

4 – Yo voy a completar simplemente el “Title” y el contenido con informacion de pruebas.


5 – Le damos a “Save” y nuestro contenido deberia mostrarse en pantalla.


Generamos contenido aleatorio para nuestro sitio. Como Instalar DEVEL module usando composer y DDEV.

1 – Nos dirigimos a nuestra carpeta de Drupal y en nuestra terminal ejecutamos los siguientes comandos:

composer require 'drupal/devel:^5.0'
ddev drush devel:install 
ddev drush en devel
ddev drush en devel_generate

2 – Nos dirigimos a https://drupal-tutorial.ddev.site:8449/admin/modules para ver los modulos instalados y vemos que efectivamente DEVEL esta instalado.


Generar contenido aleatorio usando DEVEL module.

1 – Ir a nuestro directorio de Drupal y en nuestra terminal ejecutar el siguiente comando:

ddev drush devel-generate:content

2 – Si vamos a https://drupal-tutorial.ddev.site:8449/admin/content vamos a poder todo el contenido generado de manera aleatoria. Muy util para probar funcionalidades y generar datos de prueba.


Error inesperado al generar datos aleatorios con DEVEL.

Parece que hubo un error al generar el contenido de pruebas. Por algun motivo, cuando voy a la pagina de inicio no puede cargar. Voy a la home de mi sitio y me encuentro con esto:

El error es el siguiente:

The website encountered an unexpected error. Try again later.

TypeError: Drupal\Component\Utility\Html::escape(): Argument #1 ($text) must be of type string, null given, called in /var/www/html/core/lib/Drupal/Core/Utility/LinkGenerator.php on line 198 in Drupal\Component\Utility\Html::escape() (line 432 of core/lib/Drupal/Component/Utility/Html.php). 

Drupal\Core\Utility\LinkGenerator->doGenerate() (Line: 180)
Drupal\Core\Utility\LinkGenerator->generate() (Line: 102)
Drupal\Core\Render\Element\Link::preRenderLink()
call_user_func_array() (Line: 107)
Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 825)
Drupal\Core\Render\Renderer->doCallback() (Line: 387)
Drupal\Core\Render\Renderer->doRender() (Line: 203)
Drupal\Core\Render\Renderer->render() (Line: 484)
Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 83)
__TwigTemplate_05e22f4013095b5ef7c963268efc824c->doDisplay() (Line: 387)
Twig\Template->yield() (Line: 343)
Twig\Template->display() (Line: 358)
Twig\Template->render() (Line: 35)
Twig\TemplateWrapper->render() (Line: 33)
twig_render_template() (Line: 341)
Drupal\Core\Theme\ThemeManager->render() (Line: 446)
Drupal\Core\Render\Renderer->doRender() (Line: 459)
Drupal\Core\Render\Renderer->doRender() (Line: 203)
Drupal\Core\Render\Renderer->render() (Line: 484)
Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 137)
__TwigTemplate_fee0462df06f3e64984031fa412fdead->doDisplay() (Line: 387)
Twig\Template->yield() (Line: 343)
Twig\Template->display() (Line: 358)
Twig\Template->render() (Line: 35)
Twig\TemplateWrapper->render() (Line: 33)
twig_render_template() (Line: 341)
Drupal\Core\Theme\ThemeManager->render() (Line: 446)
Drupal\Core\Render\Renderer->doRender() (Line: 203)
Drupal\Core\Render\Renderer->render() (Line: 241)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 593)
Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 234)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare() (Line: 131)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray() (Line: 246)
Symfony\Component\EventDispatcher\EventDispatcher::Symfony\Component\EventDispatcher\{closure}() (Line: 206)
Symfony\Component\EventDispatcher\EventDispatcher->callListeners() (Line: 56)
Symfony\Component\EventDispatcher\EventDispatcher->dispatch() (Line: 188)
Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76)
Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 53)
Drupal\Core\StackMiddleware\Session->handle() (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 28)
Drupal\Core\StackMiddleware\ContentLength->handle() (Line: 32)
Drupal\big_pipe\StackMiddleware\ContentLength->handle() (Line: 116)
Drupal\page_cache\StackMiddleware\PageCache->pass() (Line: 90)
Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 36)
Drupal\Core\StackMiddleware\AjaxPageState->handle() (Line: 51)
Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 709)
Drupal\Core\DrupalKernel->handle() (Line: 19)

Parece que el problema es con los contenidos de tipo “Article”. Lo que voy a hacer simplemente es asignarle una url de manera manual a ver si se resuelve.


La pagina de inicio sigue sin funcionar.

El “Article” que antes no funcionaba ahora si funciona.

Parece que simplemente editando el “Article” y guardandolo es suficiente para que se solucione el problema. Entonces el proceso para solucionar esto simplemente es ir Article por Article, cliqueo en “Edit” y luego le doy a “Save”.

Le doy a “Save”.

El “Article” es guardado correctamente.

Y efectivamente funciona:

Para poder continuar, simplemente voy a borrar todos los “Articles” defectuosos y listo.

Parece ser que el modulo DEVEL genero los articles con algun campo defectuoso y el problema se resuelve simplemente editando y guardando el nodo.


Conclusiones

  • Vimos como instalar DDEV, Drupal, Drush y DEVEL module en local.
  • Vimos como correr composer y Drush usando DDEV.
  • Como añadir nuestra primera pagina en Drupal.
  • Vimos como DEVEL module al generar contenido fallo y como solucionarlo.

Extra: todos los comandos de DDEV y composer estan en Guia de comandos de DDEV

Contenido relacionado

Instalar Drupal 10 y drush en Opalstack

Esta es una guía de cómo instalar Drupal 10 (o superior) en el hosting Opalstack. Pre requisitos: – Debemos tener instalado composer en nuestro entorno de Opalstack. Para hacerlo seguir...

Desarrollo remoto 1

En este seminario buscamos en dos horas poder enseñarle a una persona a crear su sitio web, aprender lo básico de Drupal y cómo usamos HTML y CSS, cómo cargamos...

Crear vistas en Drupal 10 (Views Module)

Views es un modulo que nos sirve para mostrar contenidos que provienen de nuestra base de datos, con diferentes formatos, filtros, estilos, orden, cantidad. Son basicamente una Query SQL. En...