Solución al error: “Action Scheduler migration in progress” en WooCommerce (Docker)
Diagnóstico
El aviso “Action Scheduler migration in progress” indica que la inicialización de las tablas de base de datos de Action Scheduler (actionscheduler_actions, _claims, _groups, _logs) está bloqueada. El flag action_scheduler_migration_status en la tabla wp_options permanece en in-progress debido a que el evento de WP-Cron encargado de completar el esquema no se ejecuta.
Causa técnica: Fallo de loopback en Docker
WordPress depende de peticiones HTTP para ejecutar WP-Cron. En entornos Docker, si el SITE_URL apunta a http://localhost:8081 (puerto expuesto en el host), el contenedor falla al intentar realizar la petición interna (loopback), ya que dentro de la red del contenedor el servicio escucha en el puerto 80, no en el 8081.
Este fallo impide la ejecución del cron y bloquea el runner de Action Scheduler, afectando a procesos como wc_sync_master_process_event.
Soluciones
Opción A: ALTERNATE_WP_CRON (Uso limitado)
Añadir al WORDPRESS_CONFIG_EXTRA en docker-compose.yml:
define('ALTERNATE_WP_CRON', true);
Limitación: Requiere visitas al panel de administración para disparar el cron. No es fiable para procesos de sincronización masiva.
Opción B: Contenedor dedicado (Recomendado)
Desactivar el cron nativo y ejecutar las tareas mediante un servicio CLI dedicado en docker-compose.yml:
# En la configuración del servicio WordPress:
WORDPRESS_CONFIG_EXTRA: |
define('DISABLE_WP_CRON', true);
# Nuevo servicio de ejecución:
cron-master:
image: wordpress:cli-php8.2
restart: unless-stopped
volumes:
- master_data:/var/www/html
entrypoint: /bin/sh -c "while true; do wp cron event run --due-now --path=/var/www/html --allow-root --quiet; sleep 60; done"
depends_on:
- master
- db
Opción C: Ejecución manual (Inmediata)
Para forzar la migración y la cola de tareas sin modificar la configuración, ejecutar desde el host:
# Ejecutar tareas pendientes: docker compose exec master wp cron event run --due-now --path=/var/www/html --allow-root # Forzar el runner de Action Scheduler: docker compose exec master wp action-scheduler run --path=/var/www/html --allow-root