Firebase-tools: Não é possível ler a propriedade 'implanta' de indefinido

Criado em 1 mai. 2019  ·  36Comentários  ·  Fonte: firebase/firebase-tools

Informação do ambiente


firebase-tools:
[email protected]


Plataforma:
Mac OS

Caso de teste

MacOS, Nó 10.15.3, [email protected]

Passos para reproduzir

Crie dois sites de hospedagem no Firebase console.
Corre
'firebase target: apply hosting dev firebase-hosting-id'
Corre
'firebase deploy --only hosting: dev '

Comportamento esperado

Implantação bem-sucedida

Comportamento real

[info] Project Console: https://console.firebase.google.com/project/project-name/overview
[debug] [2019-05-01T19:12:12.726Z] TypeError: Cannot read property 'deploys' of undefined
    at /Users/reeda/.nvm/versions/node/v10.15.3/lib/node_modules/firebase-tools/lib/deploy/index.js:88:36
    at process._tickCallback (internal/process/next_tick.js:68:7)
[error] 
[error] Error: An unexpected error has occurred.
hosting bug

Comentários muito úteis

Resolvi o meu certificando-me de que:

  1. .firebaserc deve ter targets.<PROJECT_ID>.hosting.<TARGET_NAME> = [ "<HOST_ID" ]
{
  "projects": {
    "default": "my-project-id"
  },
  "targets": {
    "my-project-id": {
      "hosting": {
        "my-blog": [
          "my-blog-host-id"
        ]
      }
    }
  }
}

A parte targets pode ser gerada usando o comando firebase target:apply hosting my-blog my-blog-host-id

  1. firebase.json deve ter hosting como uma matriz, e seu item deve ter target: <TARGET_NAME>
{
  "hosting": [{
    "target": "my-blog",
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }]
}

A parte importante é fazer hosting um array e adicionar target ao seu item.

Todos 36 comentários

Houve alguns ajustes neste fluxo recentemente. Este erro está vindo de (na fonte): https://github.com/firebase/firebase-tools/blob/master/src/deploy/index.js#L111

@Memeriaj você pode dar uma olhada como tem lidado com isso ultimamente?

Acho que posso saber o que está acontecendo aqui. Seu arquivo de configuração firebase.json contém "target": "dev" ? Acredito que filtramos todas as configurações que não correspondiam a hosintg:dev e ficamos com um array vazio. Em seguida, passamos por todas as etapas de implantação para esse array vazio, efetivamente sem fazer nada. Então, no final, exibimos o link do console e o link para o seu site de hospedagem recém-implantado, que é onde esse erro aparece porque não implantamos nada na verdade.

Definitivamente, precisamos de um erro adequado neste caso, explicando que não estamos implantando nada.

(não relacionado ao problema: geralmente, você deseja que a mudança de nível de ambiente seja no nível de projeto do Firebase e não em diferentes sites de hospedagem dentro do mesmo projeto (embora você possa ter um site para um blog, um site para um aplicativo da web, e um site para seus documentos que estão todos no mesmo ambiente em diferentes sites de hospedagem no mesmo projeto). Isso ocorre principalmente porque coisas como Firebase Auth têm apenas uma única instância em um projeto. Idealmente, seu arquivo firebase.json é configurado de forma que você seja capaz de algo como firebase use dev , firebase deploy , verifique o desenvolvimento para ter certeza de que as coisas estão funcionando, firebase use staging , firebase deploy , ...)

{ "firestore": { "rules": "firestore.rules", "indexes": "firestore.indexes.json" }, "hosting": { "public": "build", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "rewrites": [ { "source": "**", "destination": "/index.html" } ] }, "functions": { "predeploy": [ "npm --prefix \"$RESOURCE_DIR\" run lint" ] } }

Acho que a configuração que você mencionou está no arquivo firebase bashrc e não no arquivo firebase json.

Na seção de hospedagem do arquivo firebase.json, você precisa ter "target": "dev" para que firebase deploy --only hosting:dev funcione. O sinalizador --only funciona como um filtro e sem o campo target em sua configuração de hospedagem, o CLI não está implantando nada (o que deveria ser um erro com uma mensagem útil, mas agora apenas aceita cegamente isto).

Desculpe, não está claro onde colocar o campo de destino no json, eu colocaria isso na raiz do json (não funcionou) ou se deveria estar na raiz da hospedagem (também não funcionou para mim).

Além disso, meu arquivo firebaserc faz referência ao meu projeto raiz, mas não tem nenhuma referência ao meu segundo site de hospedagem, então não tenho certeza de como a ferramenta CLI será capaz de entender onde implantar.

Ele deve ir na seção Hospedagem de seu arquivo firebase.json para que se pareça com:

{
// ...
  "hosting": [{ // Can be an array and have multiple configs, or an object if you've only got a single config
    "target": "blog",
    "public": "build/blog"
    // ...
  }],
// ...
}

Esta página de documentos apresenta mais detalhes sobre cada etapa e fala um pouco sobre por que você pode usar destinos e vários sites também.

Com firebase target:apply hosting dev firebase-hosting-id então firebase-hosting-id deve ser o nome do site no qual você está planejando implantar. Isso define o destino no projeto em que você está atualmente na CLI, que vem do comando firebase use . Mas talvez eu tenha entendido mal o que você está tentando realizar.

Obrigado, parece que estou fazendo algum progresso, mas agora estou recebendo uma entidade de erro 404 não encontrada.
Digamos que meu projeto no firebase seja reedy-1 e meu destino seja reedy-1-api
Quando adiciono meu destino na hospedagem como reedy-1-api, quando tento implantá-lo, ele reclama que a entidade não foi encontrada.
Posso ver no meu arquivo firebaserc, em alvos

"targets": {
   "reedy-1": {
      "hosting": {
         "dev-api": [
           "reedy-1-api"
         ]
      }
   }
}

Esse trecho de seu arquivo .firebaserc parece correto para mim.

Possíveis problemas (você provavelmente verificou esses, mas estou listando-os apenas no caso de outras pessoas descobrirem mais tarde):

  • Certifique-se de que está usando o projeto adequado com firebase use
  • Certifique-se de que o ID do projeto está correto (isso deve ser feito para você por meio da lista de projetos em firebase use --add )
  • Certifique-se de que o nome do site está correto (facilmente encontrado por meio de <site-name>.firebaseapp.com )

Se você tentar implantar com o sinalizador de depuração, em qual parte o que está retornando o 404? Eu suspeitaria que viria de POST https://firebasehosting.googleapis.com/v1beta1/sites/<site-name>/versions pois essa é a primeira solicitação da implantação real do Hosting. Se for esse o caso, acho que há algo errado com o nome do site que você configurou como destino. Se for um pedido anterior, então meu melhor palpite é que há algo acontecendo com o seu projeto.

Ok, consegui descobrir o que estava acontecendo.
Você precisa de uma mensagem de erro melhor para isso também, então SE você não estiver no blaze e acima, a mensagem de erro é 404, não é óbvio que eu não poderia implantar por causa do meu plano de preços.
Após a atualização, boom, tudo está funcionando.
Obrigado pela ajuda, feliz por ter esse problema resolvido.

Uau, espere. Você precisava atualizar para o Blaze para que sua implantação funcionasse? O que é isso porque você ainda não criou o novo Site de Hospedagem e precisou fazer um upgrade para fazer isso? Ou será que você atualizou anteriormente para o Blaze, criou um segundo site de hospedagem, rebaixou seu plano de cobrança e tentou implementar?

Além disso, você sabe qual solicitação estava gerando esse erro? Porque você está certo, esse erro não ajuda em nada e eu quero rastrear de onde ele veio para que possa fornecer algumas orientações sobre o que fazer em vez de um texto 404 genérico.

Sim, isso mesmo. É um pouco confuso. Tenho quase certeza de que criei o segundo site no nível gratuito, depois tive problemas para implantar e pensei que poderia ser isso, então atualizei. Quando percebi que precisava levantar um problema no github, fiz o downgrade e, ao fazer isso, coisas estranhas começaram a acontecer no console da web do firebase. O segundo site de hospedagem aparecerá, mas quando eu clicar nele, aparecerá uma tela vazia.
Depois que recebi seu suporte, tentei implantar, ele mostrou um 404 no implantar. Então eu pensei em atualizar de volta para Blaze, e como mágica funcionou.

tendo o mesmo problema

@isevcik realmente? Eu tinha quase certeza de que corrigimos esse problema (e eu realmente deveria ter fechado isso). Você fez algo semelhante ao atualizar seu projeto e, em seguida, rebaixá-lo?

Você provavelmente deve enviar um e-mail para o suporte para que possamos obter os detalhes do seu projeto e consertá-lo. Certifique-se de mencionar este problema do GitHub e eu, para que eles saibam a quem enviá-lo.

@isevcik Eu estava recebendo o mesmo erro e pensei que tinha o mesmo problema, mas acabou sendo um erro de digitação no projectid em .firebaserc.
Usei este comando para adicionar esses alvos em vez de fazê-lo manualmente e funcionou.
Observação: você também precisa adicionar o destino ao firebase.json.

alvo firebase

https://firebase.google.com/docs/cli/targets

Olá, mesmo problema:

[debug] [2019-08-09T17:34:19.322Z] TypeError: Cannot read property 'deploys' of undefined
    at /Users/kevinliu/.npm-global/lib/node_modules/firebase-tools/lib/deploy/index.js:84:36
    at processTicksAndRejections (internal/process/task_queues.js:85:5)
[error] 
[error] Error: An unexpected error has occurred.

index.js :

   if (deployedHosting) {
            _.each(context.hosting.deploys, function (deploy) {
                logger.info(clc.bold("Hosting URL:"), utils.addSubdomain(api.hostingOrigin, deploy.site));
            });
            const versionNames = context.hosting.deploys.map((deploy) => deploy.version);
            return { hosting: versionNames.length === 1 ? versionNames[0] : versionNames };
        }

@hpoit Também estou recebendo esse erro. Você resolveu isso? Se sim, o que você mudou?

[debug] [2019-08-16T18:44:01.159Z] TypeError: Cannot read property 'deploys' of undefined
    at C:\Users\Kraken\AppData\Roaming\npm\node_modules\firebase-tools\lib\deploy\index.js:84:36
    at process._tickCallback (internal/process/next_tick.js:68:7)
[error] 
[error] Error: An unexpected error has occurred.

Isso foi resolvido para alguém que entrou em contato com o suporte conforme sugerido por @Memeriaj ? Em caso afirmativo, os detalhes podem ser postados aqui para referência futura?

@MaxInertia sim, resolvi,

Acho que apenas lança este erro quando não consegue encontrar o destino de implantação em sua configuração. Gostaria de verificar sua configuração nos dois arquivos de configuração do firebase. Poste o conteúdo aqui se quiser uma segunda opinião.

A mesma coisa aqui, quando tentei implantar um site secundário com o firebase 7.3.1

Na verdade, o erro estava em firebase.json, especifiquei o "destino" errado

Consegui resolver esse problema criando um novo destino de implantação com a ajuda deste guia:

https://firebase.google.com/docs/hosting/multisites?authuser=1#set_up_deploy_targets

Eu dei um comando:

firebase target:apply hosting blog myapp

e adicionei target chave à minha firebase.json

{
  "hosting": {
    "target": "myapp",
    ...
  }
  ...
}

editar: Entrei neste problema quando configurei minha primeira hospedagem no meu novo projeto Firebase.

Eu também fui capaz de resolver isso. Meu problema era que, quando criei meu destino de implantação usando o comando descrito nos documentos: $ firebase target: apply hosting target-name resource-name , coloquei meu projeto principal como o nome do recurso. Mudei isso no arquivo .firebaserc e executei o comando firebase deploy e funcionou. Exemplo abaixo:

"targets": {
    "firebase-project-name": {
      "hosting": {
        "admin": [
          "admin-project"
        ]
      }
    }
  }

Olá, também estou enfrentando o mesmo problema, um pouco de maneira diferente (para domínio adicionado personalizado)

Consigo implantar em hospedagem múltipla com nome de destino diferente. mas quando tento implantar em meu domínio adicionado personalizado. Recebo o erro: Erro de HTTP: 404, entidade solicitada não encontrada.

Meu domínio personalizado é 3dprinter.froozen.in (adicionado ao firebase dentro da hospedagem padrão clicando no botão Adicionar domínio personalizado)
Meu domínio personalizado é adicionado dentro do domínio padrão do meu projeto.
Por favor, ajude-me a prosseguir

Precisaremos de logs de depuração que mostrem a chamada com falha exata para poder ajudar
diagnosticar o problema.

No sábado, 4 de janeiro de 2020, 12h52, nandha [email protected] escreveu:

Olá, também estou enfrentando o mesmo problema, um pouco de uma maneira diferente (para custom
domínio adicionado)

Consigo implantar em hospedagem múltipla com nome de destino diferente. mas
quando tento implantar em meu domínio adicionado personalizado. Recebo o erro: HTTPErro: 404, a entidade solicitada não foi encontrada.

Meu domínio personalizado é 3dprinter.froozen.in (adicionado ao firebase dentro
hospedagem padrão clicando no botão Adicionar domínio personalizado)
Meu domínio personalizado é adicionado dentro do domínio padrão do meu projeto.
Por favor, ajude-me a prosseguir

-
Você está recebendo isto porque está inscrito neste tópico.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/firebase/firebase-tools/issues/1232?email_source=notifications&email_token=AAAAH7SNCPUEIMIWCDHK6CDQ4BE4JA5CNFSM4HJWK5J2YY3PNVWWK3TUL52HS4DFVREXHWSGUARC3W7048NBOR5NVREXWH63WORC5WHC548NZ63WORCOM5WICCOMZ6WH63COMZ6WORCOMZH63WORC5WORC5WH63COMZ6WICCOMZH63WORCOMZH63WORCOMZH63WORCOM5WH63COMBY6C5WHCVRF5WR5WORCNZ63EBJORRZ63EBY6C5WORCZWH63COMBY6C5WHCVRF5WH63COMBYR5WHCRVReq .
ou cancelar
https://github.com/notifications/unsubscribe-auth/AAAAH7V26G3YF6Q7FYDP5QTQ4BE4JANCNFSM4HJWK5JQ
.

Olá @mbleigh ,

Eu tenho meu problema resolvido

  1. O domínio não estava totalmente vinculado
  2. Firebase.json de hospedagem foi modificado de acordo com a documentação
    Quando ambos são feitos, funcionou corretamente conforme o esperado

Se não houver mais perguntas, podemos resolver este problema
Em caso de dúvidas, comente abaixo

Meu problema com "Erro: Erro HTTP: 404, entidade solicitada não foi encontrada", tentei usar

`` `
"alvos": {
"Nome do Projeto": {
"hospedagem": {
"dev": [
"dev.site.com"
],
"prod": [
"site.com"
]
}
}
}


istead of

 ```
"targets": {
    "projectname": {
      "hosting": {
        "dev": [
          "dev-site-name"
        ],
        "prod": [
          "ez-site-name"
        ]
      }
    }
  }

Resolvi o meu certificando-me de que:

  1. .firebaserc deve ter targets.<PROJECT_ID>.hosting.<TARGET_NAME> = [ "<HOST_ID" ]
{
  "projects": {
    "default": "my-project-id"
  },
  "targets": {
    "my-project-id": {
      "hosting": {
        "my-blog": [
          "my-blog-host-id"
        ]
      }
    }
  }
}

A parte targets pode ser gerada usando o comando firebase target:apply hosting my-blog my-blog-host-id

  1. firebase.json deve ter hosting como uma matriz, e seu item deve ter target: <TARGET_NAME>
{
  "hosting": [{
    "target": "my-blog",
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }]
}

A parte importante é fazer hosting um array e adicionar target ao seu item.

Também fui atingido por isso hoje, converter firebase.json hosting em array é realmente doloroso!

Agora eu preciso duplicar cada entrada (mesmo que seja a mesma, exceto o destino), que tem muitas configurações de cabeçalhos para todos os ambientes, de repente é a configuração 4x json que preciso gerenciar.

Qualquer maneira de reutilizar a hospedagem padrão do firebase json?

Múltiplos sites no mesmo projeto não devem ser usados ​​como "ambientes" - se você tiver um site "staging", "dev", etc., eles devem ser sites em projetos diferentes e o comando firebase use pode ajudar você alterna entre / implanta para eles de forma independente.

Se não é isso que você está fazendo, você pode me ajudar a entender por que a configuração firebase.json de cada um dos sites em seu projeto é idêntica?

Bem, isso resume tudo, atualmente temos 4 ambientes diferentes em projetos GCP diferentes, no entanto, precisávamos implantar um ambiente temporário (que inclui outras partes, não apenas o firebase hosting), parecia muito mais simples de reutilizar os existentes Projeto GCP por um ou dois meses, em vez de adicionar um novo.

A única maneira de conseguir esse atm é duplicar a configuração de hospedagem firebase.json 5 vezes e adicionar um destino exclusivo a cada configuração.

Eu acho que de onde vem a confusão, é se você tem uma configuração de hospedagem padrão, a expectativa é que funcione com qualquer alvo ou projeto, mas acho que é meu mal-entendido sobre como é usado por diferentes projetos, em comparação com projeto + alvo.

Obviamente ainda posso fazer funcionar, só demorou um pouco para entender porque esse erro apareceu.
2020-06-22T17:20:39.837Z] TypeError: Cannot read property 'deploys' of undefined

A mensagem de erro é definitivamente ruim de qualquer maneira, e FWIW, temos uma solução melhor para "visualizações efêmeras" em desenvolvimento agora 😄

Apenas para adicionar à "correção de array", temos dois sites implantados, consegui direcionar o site correto depois de alterar os alvos para um array:

{ "hosting": [ { "target": "web", "public": "public", "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], "rewrites": [ { "source": "**", "destination": "/index.html" } ] }, { "target": "admin", "public": "build", "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], "rewrites": [ { "source": "**", "destination": "/index.html" } ] } ] }

Mas então o "admin" retornou uma página em branco, como estamos usando o React, o truque era ter o ponto Público para construir.
"public": "build",

Estou encontrando esse problema e tudo está correto de acordo com o acima e os documentos. Ainda assim, recebo o erro. Não importa qual destino eu use, ele não parece respeitar isso, embora todos os arquivos e configurações sejam relatados como corretos. Há mais alguma coisa não coberta acima?

  1. corrida: firebase target:apply hosting second-project-id second-project-id

  2. em seguida, abra o arquivo .firebaserc e certifique-se de que se parece com o seguinte
    `{
    "alvos": {

    "main-project-id": {
    "hospedagem": {
    "second-project-id": [
    "second-project-id"
    ]
    }
    }
    }
    } `

  3. em seguida, abra o arquivo firebase.json e verifique se ele contém o seguinte
    "target": "second-project-id",

Hmm, não sei exatamente o que fiz para fazê-lo funcionar, mas atualmente funciona com este .firebaserc :

{
  "projects": {
    "default": "mainProjectId"
  },
  "targets": {
    "mainProjectId": {
      "hosting": {
        "production": [
          "mainProjectId"
        ],
        "staging": [
          "secondProjectId"
        ]
      }
    }
  }
}
Esta página foi útil?
0 / 5 - 0 avaliações