Pular para o conteúdo principal

Solução de problemas e depuração de Blueprints

Erros de Blueprint geralmente apontam para um destes três lugares:

  • O JSON do Blueprint é inválido.
  • O Playground não conseguiu buscar o Blueprint ou um dos recursos dele.
  • Uma etapa do Blueprint foi executada, mas o WordPress, PHP, WP-CLI ou um plugin falhou.

Comece pelo nome exato do erro mostrado pelo Playground e use a seção correspondente abaixo.

Lista de verificação rápida

  • Cole o Blueprint no editor de Blueprints para validar o esquema JSON.
  • Se o Blueprint for carregado de uma URL, abra essa URL diretamente em uma janela privativa do navegador e confirme que ela baixa um JSON válido ou um pacote ZIP de Blueprint.
  • Se uma etapa falhar, anote o número da etapa em BlueprintStepExecutionError. A etapa com falha normalmente é o item nessa posição depois que os atalhos de Blueprint são expandidos.
  • Abra as ferramentas de desenvolvedor do navegador e verifique as abas Console e Network para detalhes de download, CORS, PHP ou ativação de plugins.
  • Para falhas de ativação de plugin/tema, confira o painel Logs do Playground ou o console do navegador para avisos e erros fatais de PHP.

InvalidBlueprintError

InvalidBlueprintError significa que o Blueprint não corresponde ao formato de dados do Blueprint. A saída do erro normalmente contém caminhos como /steps/2/pluginData ou /preferredVersions.

Propriedade inesperada activate

activate deve ficar dentro de options, não diretamente na etapa nem dentro de pluginData.

{
"step": "installPlugin",
"pluginData": {
"resource": "wordpress.org/plugins",
"slug": "woocommerce"
},
"options": {
"activate": true
}
}

Propriedade inesperada plugins em preferredVersions

preferredVersions aceita somente php e wp. Instale plugins com o atalho plugins no nível superior ou com uma etapa explícita installPlugin.

{
"preferredVersions": {
"php": "8.3",
"wp": "latest"
},
"plugins": ["sqlite-database-integration"]
}

slug, url, path ou files ausente

O objeto de recurso está incompleto ou usa o formato errado. Correções comuns:

  • Plugin do WordPress.org: { "resource": "wordpress.org/plugins", "slug": "akismet" }
  • URL de ZIP: { "resource": "url", "url": "https://example.com/plugin.zip" }
  • Diretório Git: { "resource": "git:directory", "url": "https://github.com/org/repo", "ref": "trunk", "refType": "branch" }

Consulte Referências de recursos para ver todos os formatos de recurso compatíveis.

Propriedades mistas de instalação de plugin

Use pluginData para installPlugin. Não forneça pluginData junto com exemplos antigos ou objetos personalizados como pluginZipFile.

O recurso de plugin do WordPress.org também precisa de um slug separado:

{
"step": "installPlugin",
"pluginData": {
"resource": "wordpress.org/plugins",
"slug": "woocommerce"
}
}

Não escreva "resource": "wordpress.org/plugins/woocommerce".

BlueprintFetchError

BlueprintFetchError significa que o Playground não conseguiu carregar o arquivo passado para ?blueprint-url=.

Verifique se a URL:

  • É pública e não exige cookies, login, sessão temporária ou VPN.
  • Retorna HTTP 200 quando aberta diretamente.
  • Serve JSON válido ou um pacote ZIP com blueprint.json dentro.
  • Envia Access-Control-Allow-Origin: * ou outro cabeçalho que permita https://playground.wordpress.net.
  • Usa uma URL de arquivo bruto, não uma página HTML de repositório.

Para GitHub, use URLs raw.githubusercontent.com em vez de github.com/.../blob/.... Para GitLab, use a URL de arquivo bruto em vez de uma página /-/blob/.

# Good
https://raw.githubusercontent.com/WordPress/blueprints/trunk/blueprints/welcome/blueprint.json

# Not a raw JSON response
https://github.com/WordPress/blueprints/blob/trunk/blueprints/welcome/blueprint.json

URLs temporárias de túnel, URLs de desenvolvimento local e assets de lançamento em rascunho costumam falhar porque o navegador não consegue acessá-los ou porque eles não permitem requisições de origem cruzada. Mova o Blueprint para um host público com CORS ativado.

O arquivo de Blueprint não é JSON válido nem arquivo ZIP

Isso significa que o Playground recebeu uma resposta, mas ela não era um Blueprint. A URL pode ter retornado uma página HTML, página 404, visualizador de arquivo de repositório, aviso de proxy, página de login ou ZIP corrompido.

Abra a URL diretamente e verifique se:

  • URLs JSON retornam JSON de Blueprint válido.
  • URLs de pacote ZIP baixam um arquivo ZIP real.
  • Pacotes de Blueprint contêm blueprint.json na raiz do ZIP.
  • A resposta não é uma pequena página HTML ou texto de erro.

URIError: URI malformed

URIError: URI malformed normalmente aponta para um fragmento de Blueprint codificado incorretamente na URL, não para uma etapa de Blueprint com falha. Verifique escapes % inválidos, fragmentos codificados duas vezes ou JSON bruto colado depois de #. Reconstrua o link a partir do Blueprint original e codifique-o uma vez, ou use Base64. Consulte Fragmentos de Blueprint codificados.

ResourceDownloadError

ResourceDownloadError significa que o Blueprint carregou, mas uma etapa não conseguiu baixar um recurso, como um ZIP de plugin, ZIP de tema, arquivo WXR ou arquivo de site importado.

Confirme se a URL do recurso:

  • Baixa o arquivo real, não uma página HTML, aviso de redirecionamento ou artefato expirado.
  • É pública e não exige autenticação.
  • Permite requisições de origem cruzada.
  • É a URL direta do arquivo. Algumas páginas de release e de artefatos de CI são páginas para pessoas, não downloads diretos.
  • Ainda existe. Links temporários e artefatos de CI podem expirar.

Para código-fonte em um repositório Git, prefira um recurso git:directory. Use um recurso url para artefatos ZIP criados e já disponíveis publicamente para download.

BlueprintStepExecutionError

BlueprintStepExecutionError significa que uma etapa específica falhou depois que o Blueprint começou a ser executado. A mensagem inclui um número de etapa:

BlueprintStepExecutionError: Error when executing the blueprint step #4

Use esse número para inspecionar a etapa correspondente. Se o Blueprint usa atalhos como plugins, login, siteOptions ou constants, o Playground os expande em etapas antes de executar o Blueprint. Use steps explícitas quando a ordem for importante.

Parâmetros de consulta de URL como ?plugin=..., ?theme=..., ?php=..., ?wp=... e ?networking=yes também criam um Blueprint implícito. Erros dessas URLs ainda são erros de execução de Blueprint, e as etapas geradas afetam o número de etapa informado.

PHP.run() failed with exit code 255

O código de saída 255 normalmente significa que o PHP encontrou um erro fatal. Procure a primeira linha Fatal error, Uncaught ou TypeError na saída. A grande página HTML de erro ao redor dela costuma ser a tela genérica de erro crítico do WordPress.

Para tornar a saída mais útil durante a depuração, ative as constantes de depuração do WordPress perto do início do Blueprint:

{
"step": "defineWpConfigConsts",
"consts": {
"WP_DEBUG": true,
"WP_DEBUG_LOG": true,
"WP_DEBUG_DISPLAY": true,
"WP_DISABLE_FATAL_ERROR_HANDLER": true
}
}

Depois execute o Blueprint novamente e confira o painel Logs do Playground ou o console do navegador.

PHP.run() failed with exit code 1

O código de saída 1 costuma aparecer quando o WP-CLI ou o WordPress retorna um erro da aplicação. Leia primeiro a seção Stderr. Ela normalmente informa o argumento sem suporte, o recurso ausente ou a falha específica do comando.

Alguns comandos WP-CLI se comportam de forma diferente no Playground porque o WordPress é executado em WebAssembly com SQLite. Mantenha os comandos pequenos e teste-os individualmente antes de adicionar uma cadeia longa a um Blueprint.

Undefined constant ABSPATH

Isso normalmente acontece em uma etapa runPHP que chama APIs do WordPress sem antes carregar o WordPress.

Adicione wp-load.php antes de qualquer função, constante, opção ou API de plugin do WordPress:

{
"step": "runPHP",
"code": "<?php require '/wordpress/wp-load.php'; update_option('blogname', 'Demo site');"
}

Plugin could not be activated

Erros de ativação de plugin geralmente vêm do próprio plugin, não do executor de Blueprints. Causas comuns:

  • O plugin exige uma versão mais recente do PHP ou do WordPress.
  • O plugin tem um erro fatal na ativação.
  • O plugin depende de outro plugin que não está instalado ou ativado.
  • O plugin faz um redirecionamento ou imprime uma saída inesperada durante a ativação.
  • O ZIP do plugin é extraído para uma pasta ou arquivo principal com nome diferente do caminho que a etapa está ativando.

Se o erro disser que a versão atual do PHP ou do WordPress não atende aos requisitos mínimos, defina preferredVersions:

{
"preferredVersions": {
"php": "8.3",
"wp": "latest"
}
}

WordPress exited with exit code 0

A ativação pode falhar mesmo quando o WordPress sai com código 0. Isso normalmente significa que o WordPress retornou uma resposta de erro de ativação, em vez de uma falha do processo PHP. Quando a mensagem disser Inspect the "debug" logs, verifique o painel Logs do Playground, o console do navegador ou a saída da CLI.

Procure avisos de PHP, redirecionamentos ou saída impressa durante a ativação, plugins de dependência ausentes ou requisitos mínimos de PHP/WordPress do plugin.

Current PHP or WordPress version does not meet minimum requirements

Erros de incompatibilidade de versão costumam incluir textos como:

Current PHP version (7.4.33) does not meet minimum requirements. The plugin requires PHP 8.0.

ou:

Current WordPress version (6.9.4) does not meet minimum requirements. The plugin requires WordPress 7.0.

Defina preferredVersions para uma versão compatível de PHP e WordPress, ou use uma versão do plugin/tema compatível com as versões disponíveis no Playground.

Se o erro for:

Failed to download WordPress 6.9.0 (HTTP 404)

a compilação solicitada do WordPress não está disponível. Use latest, uma versão lançada compatível ou um valor beta/nightly compatível.

Se o erro disser Plugin file does not exist, inspecione o nome da pasta instalada. Para URLs ZIP com nomes de pasta incomuns, defina targetFolderName:

{
"step": "installPlugin",
"pluginData": {
"resource": "url",
"url": "https://example.com/my-plugin.zip"
},
"options": {
"activate": true,
"targetFolderName": "my-plugin"
}
}

Se o plugin tiver dependências, instale e ative essas dependências primeiro com etapas explícitas.

Theme could not be activated

Falhas de ativação de tema geralmente significam que o nome da pasta do tema está errado, que o ZIP do tema foi extraído para um diretório inesperado ou que o código do tema causou um erro do WordPress/PHP.

Use installTheme com options.activate ao instalar um tema:

{
"step": "installTheme",
"themeData": {
"resource": "wordpress.org/themes",
"slug": "twentytwentyfour"
},
"options": {
"activate": true
}
}

Se você usar uma etapa independente activateTheme, passe o nome da pasta dentro de wp-content/themes, não uma URL completa ou o nome do arquivo ZIP.

Could not write to a file

Erros como este significam que o diretório pai não existe:

Could not write to "/wordpress/wp-content/plugins/example/index.php":
There is no such file or directory OR the parent directory does not exist.

Crie o diretório primeiro com mkdir ou use writeFiles com um recurso literal:directory.

[
{
"step": "mkdir",
"path": "/wordpress/wp-content/plugins/example"
},
{
"step": "writeFile",
"path": "/wordpress/wp-content/plugins/example/index.php",
"data": "<?php /* Plugin Name: Example */"
}
]

Could not unzip file

Isso normalmente significa que o arquivo não é um ZIP válido. A URL pode ter retornado uma página HTML, uma resposta de erro, uma página de login ou um arquivo truncado.

Se a saída disser Could not unzip file. Error code: 19, verifique se o download é um arquivo ZIP. Um tamanho de arquivo pequeno costuma significar que o servidor retornou uma página HTML de erro em vez do arquivo.

Abra a URL diretamente e confirme que o navegador baixa um ZIP. Se você estiver usando um artefato do GitHub ou de CI, use uma URL de download direto e garanta que a release ou o artefato seja público.

Armadilhas de comandos WP-CLI

A etapa wp-cli executa o WP-CLI dentro do Playground. Ela é útil para tarefas de configuração, mas nem todo comando ou recurso de shell se comporta como em um terminal local.

Correções comuns:

  • Use o nome de etapa "wp-cli", não "wpcli" nem "cli".
  • Mantenha os comandos focados. Prefira várias etapas wp-cli em vez de um comando de shell complexo.
  • Evite substituições de shell como $(...) em Blueprints compartilhados. Use runPHP para lógica que precisa das APIs do WordPress.
  • Confira os nomes dos parâmetros no comando WP-CLI que você está usando. Por exemplo, parâmetros específicos podem diferir entre wp post list, wp post delete e comandos fornecidos por plugins.
  • Se um comando WP-CLI fornecido por plugin falhar com um stack trace do plugin, a correção normalmente pertence a esse plugin ou aos dados de entrada passados ao comando.
  • Se um comando falhar com unknown --post_type parameter ou unknown --format parameter, verifique se as flags pertencem a outro comando no pipeline.
  • Se um comando de plugin falhar com Unsupported argument type passed to WP_CLI::error_to_string(): 'NULL', confirme que o plugin está ativo, os dados importados existem e a entrada do comando aponta para um recurso válido.

WP-CLI: Error establishing a database connection on mounted sites

Ao usar wp-cli com um site Playground montado, por exemplo via --mount-before-install, você pode encontrar "Error establishing a database connection." Isso acontece porque o WordPress Playground carrega o plugin de integração de banco de dados SQLite a partir de seus arquivos internos por padrão, não do diretório montado.

Adicione explicitamente o plugin de integração SQLite ao site WordPress montado:

{
"preferredVersions": {
"php": "8.3",
"wp": "latest"
},
"plugins": ["sqlite-database-integration"],
"steps": [
{
"step": "login",
"username": "admin"
}
]
}

Depois execute o Blueprint com o site montado:

mkdir wordpress
npx @wp-playground/cli server --mount-before-install=wordpress:/wordpress --blueprint=./blueprint.json

Ferramentas de depuração

Editor de Blueprints

Use o editor de Blueprints no navegador para criar, validar e pré-visualizar Blueprints.

Atenção

O editor está em desenvolvimento e o Playground incorporado às vezes falha ao carregar. Para contornar isso, atualize a página.

Inspeção do sistema de arquivos e do banco de dados

Algumas etapas de Blueprint, como writeFile, alteram o sistema de arquivos interno. Outras, como runSql, alteram o banco de dados.

Para inspecionar o estado final, instale plugins como SQL Buddy e WPide. Você pode vê-los em ação em https://playground.wordpress.net/?plugin=sql-buddy&plugin=wpide.

Você também pode inspecionar uma instância do Playground pelo console do navegador usando window.playground:

await playground.isDir('/wordpress/wp-content/plugins');
await playground.listFiles('/wordpress/wp-content/plugins');

Consulte a API PlaygroundClient completa.

Console do navegador e requisições de rede

Abra as ferramentas de desenvolvedor do navegador para verificar erros de JavaScript, logs de depuração de PHP e requisições de rede com falha. No Chrome, Firefox e Edge, pressione Ctrl + Shift + I no Windows/Linux ou Cmd + Option + I no macOS.

Safari

Se você ainda não ativou o menu Develop, acesse Safari > Settings... > Advanced e marque Show features for web developers.

Registro de erros personalizado

Você pode gravar suas próprias mensagens com error_log() em uma etapa runPHP e depois conferir o painel Logs do Playground ou o console do navegador.

Captura de logs de erro

Ao baixar sua instância do Playground como ZIP pela opção "Download as zip", o arquivo também inclui debug.log.

Peça ajuda

Se você precisar de ajuda, abra uma issue e inclua:

  • O JSON do Blueprint ou a URL pública do Blueprint.
  • A mensagem de erro exata.
  • O número da etapa com falha, se mostrado.
  • Navegador, sistema operacional e se você usou o site, a API JavaScript ou a CLI.
  • Saída relevante do console, da rede ou da CLI.