firebase-tools:
[email protected]
Plataforma:
Mac OS
MacOS, Nó 10.15.3, [email protected]
Crie dois sites de hospedagem no Firebase console.
Corre
'firebase target: apply hosting dev firebase-hosting-id'
Corre
'firebase deploy --only hosting: dev '
Implantação bem-sucedida
[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.
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):
firebase use
firebase use --add
)<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
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
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:
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
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?
corrida: firebase target:apply hosting second-project-id second-project-id
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"
]
}
}
}
} `
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"
]
}
}
}
}
Comentários muito úteis
Resolvi o meu certificando-me de que:
targets.<PROJECT_ID>.hosting.<TARGET_NAME> = [ "<HOST_ID" ]
A parte
targets
pode ser gerada usando o comandofirebase target:apply hosting my-blog my-blog-host-id
hosting
como uma matriz, e seu item deve tertarget: <TARGET_NAME>
A parte importante é fazer
hosting
um array e adicionartarget
ao seu item.