Firebase-tools: Impossible de lire la propriété 'deploys' sur undefined

Créé le 1 mai 2019  ·  36Commentaires  ·  Source: firebase/firebase-tools

Informations sur l'environnement


outils firebase:
[email protected]


Plate-forme:
MacOS

Cas de test

MacOS, Node 10.15.3, [email protected]

Étapes à suivre pour reproduire

Créez deux sites d'hébergement sur la console Firebase.
Courir
'Firebase target: appliquez l' hébergement dev firebase-host-id'
Courir
'firebase deploy --only hébergement: dev '

Comportement prévisible

Déploiement réussi

Comportement réel

[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

Commentaire le plus utile

J'ai résolu le mien en m'assurant:

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

La partie targets peut être générée à l'aide de la commande firebase target:apply hosting my-blog my-blog-host-id

  1. firebase.json doit avoir hosting comme tableau, et son élément doit avoir target: <TARGET_NAME>
{
  "hosting": [{
    "target": "my-blog",
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }]
}

L'important est de créer un tableau hosting et d'ajouter target à son élément.

Tous les 36 commentaires

Il y a eu quelques ajustements dans ce flux récemment. Cette erreur provient de (dans la source): https://github.com/firebase/firebase-tools/blob/master/src/deploy/index.js#L111

@Memeriaj pouvez-vous jeter un oeil car vous avez traité de cela ces derniers temps?

Je pense que je peux savoir ce qui se passe ici. Votre fichier de configuration firebase.json contient-il "target": "dev" ? Je crois que nous avons filtré toutes les configurations qui ne correspondaient pas à hosintg:dev et nous nous sommes retrouvés avec un tableau vide. Nous avons ensuite suivi toutes les étapes de déploiement de cette baie vide, sans rien faire. Ensuite, à la fin, nous affichons le lien de la console et le lien vers votre site d'hébergement nouvellement déployé, où cette erreur apparaît car nous n'avons en fait rien déployé.

Nous avons certainement besoin d'une erreur appropriée dans ce cas expliquant que nous ne déployons rien.

(sans rapport avec le problème: généralement, vous voulez que votre changement de niveau d'environnement se fasse au niveau du projet Firebase et non sur différents sites d'hébergement au sein du même projet (bien que vous puissiez avoir un site pour un blog, un site pour une application Web, et un site pour vos documents qui se trouvent tous dans le même environnement sur différents sites d'hébergement sur le même projet). Ceci est principalement dû au fait que des éléments tels que Firebase Auth n'ont qu'une seule instance dans un projet. Idéalement, votre fichier firebase.json est configuré de manière à pouvoir faire quelque chose comme firebase use dev , firebase deploy , vérifiez le développement pour vous assurer que tout fonctionne, 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" ] } }

Je pense que la configuration que vous mentionnez se trouve dans le fichier bashrc de firebase et non dans le fichier json de firebase.

Dans la section d'hébergement du fichier firebase.json, vous devez avoir "target": "dev" pour que firebase deploy --only hosting:dev fonctionne. Le drapeau --only fonctionne comme un filtre et sans le champ target dans votre configuration d'hébergement, la CLI ne déploie rien (ce qui devrait être une erreur avec un message utile, mais pour le moment, il accepte aveuglément il).

Désolé, ce n'est pas clair où placer le champ cible dans le json, est-ce que je le mettrais à la racine du json (cela n'a pas fonctionné) ou devrait-il être à la racine de l'hébergement (cela ne fonctionnait pas non plus pour moi).

De plus, mon fichier firebaserc fait référence à mon projet racine mais il ne contient aucune référence à mon deuxième site d'hébergement, je ne sais donc pas comment l'outil CLI pourra comprendre où déployer.

Il devrait aller dans la section Hébergement de votre fichier firebase.json pour qu'il ressemble à quelque chose comme:

{
// ...
  "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"
    // ...
  }],
// ...
}

Cette page de documentation donne plus de détails sur chaque étape et explique un peu pourquoi vous pouvez également utiliser des cibles et plusieurs sites.

Avec firebase target:apply hosting dev firebase-hosting-id alors firebase-hosting-id devrait être le nom du site sur lequel vous prévoyez de déployer. Cela définit la cible sur le projet sur lequel vous êtes actuellement dans la CLI, qui provient de la commande firebase use . Mais j'ai peut-être mal compris ce que vous essayez d'accomplir.

Merci, je semble faire des progrès, mais maintenant je reçois une entité d'erreur 404 introuvable.
Alors disons que mon projet dans Firebase est reedy-1 et que ma cible est reedy-1-api
Lorsque j'ajoute ma cible dans l'hébergement en tant que reedy-1-api, lorsque j'essaye de la déployer, il se plaint que l'entité n'a pas été trouvée.
Je peux voir dans mon fichier firebaserc, sous les cibles

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

Cet extrait de votre fichier .firebaserc me semble correct.

Problèmes possibles (vous les avez probablement vérifiés, mais je les énumère juste au cas où d'autres personnes tomberaient dessus plus tard):

  • Assurez-vous que vous utilisez le bon projet avec firebase use
  • Assurez-vous que l'ID du projet est correct (cela doit être fait pour vous via la liste de projets en firebase use --add )
  • Assurez-vous que le nom du site est correct (facilement trouvé via <site-name>.firebaseapp.com )

Si vous essayez de déployer avec l'indicateur de débogage sur quelle partie est celui qui renvoie le 404? Je soupçonne que cela viendrait de POST https://firebasehosting.googleapis.com/v1beta1/sites/<site-name>/versions puisque c'est la première demande du déploiement d'hébergement réel. Si tel est le cas, je pense qu'il y a quelque chose qui ne va pas avec le nom du site que vous avez défini comme cible. Si c'est une demande avant cela, ma meilleure estimation est qu'il y a quelque chose avec votre projet.

Ok, j'ai réussi à comprendre ce qui se passait.
Vous avez également besoin d'un meilleur message d'erreur pour cela, donc si vous n'êtes pas sur blaze et au-dessus, le message d'erreur est un 404, il n'est pas évident que je ne puisse pas déployer à cause de mon plan tarifaire.
Après la mise à niveau, boom, tout fonctionne.
Merci pour l'aide, heureux que ce problème soit résolu.

Oh, attendez. Vous aviez besoin de passer à Blaze pour que votre déploiement fonctionne? Qu'est-ce que c'est parce que vous n'avez pas encore créé le nouveau site d'hébergement et que vous avez besoin d'une mise à niveau pour le faire? Ou est-ce que vous aviez précédemment mis à niveau vers Blaze, créé un deuxième site d'hébergement, rétrogradé votre plan de facturation, puis essayé de le déployer?

Savez-vous également quelle demande a généré cette erreur? Parce que vous avez raison, cette erreur n'est pas du tout utile et je veux savoir d'où elle vient afin que je puisse lui donner des conseils sur ce qu'il faut faire au lieu d'un texte 404 générique.

Oui c'est vrai, c'est un peu déroutant, je suis presque sûr que j'ai créé le deuxième site sur le niveau gratuit, puis j'ai eu des problèmes de déploiement et j'ai pensé que c'était peut-être ça, alors j'ai mis à niveau. Quand j'ai réalisé que je devais soulever un problème sur github, j'ai rétrogradé, quand j'ai fait cela, des choses bizarres ont commencé à se produire dans la console Web de Firebase. Le deuxième site Web d'hébergement apparaîtrait, mais lorsque je cliquais dessus, il afficherait un écran vide.
Après avoir reçu votre soutien, j'ai ensuite essayé de déployer, il a montré un 404 sur le déploiement. J'ai donc pensé que je reviendrais à Blaze, et comme par magie, cela a fonctionné.

avoir le même problème

@isevcik vraiment? J'étais assez certain que nous avions résolu ce problème (et j'aurais vraiment dû le fermer). Avez-vous fait une chose similaire pour mettre à niveau votre projet, puis le rétrograder?

Vous devriez probablement envoyer un e-mail à l'assistance afin que nous puissions obtenir les détails de votre projet et le réparer. Assurez-vous de mentionner ce problème GitHub et moi-même afin qu'ils sachent à qui l'envoyer.

@isevcik J'obtenais la même erreur et je pensais avoir le même problème, mais il s'est avéré être une faute de frappe dans le projectid de .firebaserc.
J'ai utilisé cette commande pour ajouter ces cibles plutôt que de le faire manuellement et cela a fonctionné.
Remarque: vous devez également ajouter la cible à firebase.json.

Firebase target: appliquer le type nom-cible nom-ressource

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

Bonjour, même problème:

[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 J'obtiens également cette erreur. L'avez-vous résolu? Si oui, qu'avez-vous changé?

[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.

Cela a-t-il été résolu pour toute personne contactée par le support comme @Memeriaj l'a suggéré? Dans l'affirmative, les détails pourraient-ils être affichés ici pour référence future?

@MaxInertia oui je l'ai résolu, j'ai formaté et effacé toute ma machine :-)

Je pense qu'il lève simplement cette erreur lorsqu'il ne trouve pas la cible de déploiement dans votre configuration. Je vérifierais votre configuration dans les deux fichiers de configuration Firebase. Postez le contenu ici si vous voulez un deuxième avis.

Même chose ici, lors de la tentative de déploiement d'un site Web secondaire avec Firebase 7.3.1

En fait, l'erreur était dans firebase.json, j'ai spécifié une mauvaise "cible"

J'ai pu résoudre ce problème en créant une nouvelle cible de déploiement à l'aide de ce guide:

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

J'ai émis une commande:

firebase target:apply hosting blog myapp

et j'ai ajouté la clé target à mon firebase.json

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

edit: Je suis entré dans ce problème lorsque j'ai configuré mon premier hébergement sur mon tout nouveau projet Firebase.

J'ai pu le résoudre également. Mon problème était que lorsque j'ai créé ma cible de déploiement à l'aide de la commande décrite dans la documentation: $ firebase target: apply Hosting target-name resource-name , j'avais mis mon projet principal comme nom de ressource. J'ai changé cela dans le fichier .firebaserc et exécuté la commande de déploiement de firebase et cela a fonctionné. Exemple ci-dessous:

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

Salut, je suis également confronté au même problème, légèrement d'une manière différente (pour le domaine ajouté personnalisé)

Je suis capable de déployer dans plusieurs hébergements avec un nom de cible différent. mais quand j'essaye de déployer dans mon domaine ajouté personnalisé. J'obtiens une erreur: Erreur HTTP: 404, l'entité demandée n'a pas été trouvée.

Mon domaine personnalisé est 3dprinter.froozen.in (ajouté à Firebase dans l'hébergement par défaut en cliquant sur le bouton Ajouter un domaine personnalisé)
Mon domaine personnalisé est ajouté dans le domaine par défaut de mon projet.
Veuillez m'aider à continuer

Nous aurons besoin de journaux de débogage montrant l'appel échoué exact pour pouvoir aider
diagnostiquez le problème.

Le sam.4 janvier 2020 00:52, nandha [email protected] a écrit:

Salut, je suis également confronté au même problème, légèrement d'une manière différente (pour
domaine ajouté)

Je suis capable de déployer dans plusieurs hébergements avec un nom de cible différent. mais
lorsque j'essaye de déployer dans mon domaine ajouté personnalisé. J'obtiens une erreur: HTTPErreur: 404, l'entité demandée est introuvable.

Mon domaine personnalisé est 3dprinter.froozen.in (ajouté à Firebase à l'intérieur
hébergement par défaut en cliquant sur le bouton Ajouter un domaine personnalisé)
Mon domaine personnalisé est ajouté dans le domaine par défaut de mon projet.
Veuillez m'aider à continuer

-
Vous recevez ceci parce que vous êtes abonné à ce fil.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/firebase/firebase-tools/issues/1232?email_source=notifications&email_token=AAAAH7SNCPUEIMIWCDHK6CDQ4BE4JA5CNFSM4HJWK5J2YY3PNVWWK3TUL52HS4DFVTYH05WWWWK3TUL52HS4DFVTYH5WWWWK3TUL52HS4DFVTYH5WWWWK3TUL52HS4DFVTYH5WWWWK3TUL52HS4DFVTYH3TULYWLX63GTULYWLOX63
ou se désinscrire
https://github.com/notifications/unsubscribe-auth/AAAAH7V26G3YF6Q7FYDP5QTQ4BE4JANCNFSM4HJWK5JQ
.

Salut @mbleigh ,

J'ai résolu mon problème

  1. Le domaine n'était pas entièrement lié
  2. Firebase.json de l'hébergement a été modifié selon la documentation
    Lorsque les deux sont terminés, cela a fonctionné correctement comme prévu

S'il n'y a plus de requêtes, nous pouvons fermer ce problème
En cas de questions, veuillez commenter ci-dessous

Mon problème avec "Erreur: Erreur HTTP: 404, l'entité demandée n'a pas été trouvée" J'ai essayé d'utiliser

''
"cibles": {
"nom du projet": {
"hébergement": {
"dev": [
"dev.site.com"
],
"prod": [
"site.com"
]
}
}
}


istead of

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

J'ai résolu le mien en m'assurant:

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

La partie targets peut être générée à l'aide de la commande firebase target:apply hosting my-blog my-blog-host-id

  1. firebase.json doit avoir hosting comme tableau, et son élément doit avoir target: <TARGET_NAME>
{
  "hosting": [{
    "target": "my-blog",
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }]
}

L'important est de créer un tableau hosting et d'ajouter target à son élément.

J'ai aussi été touché par cela aujourd'hui, convertir firebase.json hosting en array est vraiment douloureux!

Maintenant, je dois dupliquer chaque entrée (même si c'est la même chose sauf la cible), qui ont beaucoup de configuration d'en-têtes pour tous les environnements, du coup c'est la configuration 4x json que je dois gérer.

Quoi qu'il en soit pour réutiliser l'hébergement par défaut de Firebase JSON?

Plusieurs sites dans le même projet ne sont pas destinés à être utilisés comme "environnements" - si vous avez un site "staging", "dev", etc., ceux-ci devraient être des sites dans différents projets et la commande firebase use peut vous aider vous basculez entre / déployez sur eux indépendamment.

Si ce n'est pas ce que vous faites, pouvez-vous m'aider à comprendre pourquoi la configuration firebase.json pour chacun des sites de votre projet est identique?

Eh bien, cela résume à peu près tout, nous avons actuellement 4 environnements différents dans différents projets GCP, mais nous devions déployer un environnement temporaire (qui comprend d'autres parties, pas seulement l'hébergement Firebase), ce qui nous a semblé beaucoup plus simple de réutiliser l'existant. Projet GCP pendant un mois ou deux, plutôt que d'en ajouter un tout nouveau.

Le seul moyen d'atteindre cet atm est de dupliquer la configuration d'hébergement firebase.json 5 fois et d'ajouter une cible unique à chaque configuration.

J'imagine d'où vient la confusion, c'est que si vous avez une configuration d'hébergement par défaut, on s'attend à ce que cela fonctionne avec n'importe quelle cible ou projet, mais je suppose que c'est mon malentendu sur la façon dont il est utilisé par différents projets, par rapport à projet + cible.

De toute évidence, cela peut toujours fonctionner, il a juste fallu un peu de temps pour comprendre pourquoi cette erreur s'est produite.
2020-06-22T17:20:39.837Z] TypeError: Cannot read property 'deploys' of undefined

Le message d'erreur est définitivement mauvais de toute façon, et FWIW nous avons une meilleure solution pour les «aperçus éphémères» en cours de développement maintenant 😄

Juste pour ajouter au "correctif de tableau", nous avons deux sites déployés, j'ai pu cibler le bon site après avoir changé les cibles en tableau:

{ "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" } ] } ] }

Mais alors l '"admin" a renvoyé une page vierge, car nous utilisons React, l'astuce était d'avoir le point Public à Build.
"public": "build",

Je rencontre ce problème et tout est correct selon ce qui précède et la documentation. Pourtant, j'obtiens toujours l'erreur. Quelle que soit la cible que j'utilise, cela ne semble pas respecter cela, même si tous les fichiers et paramètres sont signalés comme corrects. Y a-t-il autre chose qui n'est pas couvert ci-dessus?

  1. exécuter: firebase target:apply hosting second-project-id second-project-id

  2. puis ouvrez le fichier .firebaserc et assurez-vous qu'il ressemble à ce qui suit
    «{
    "cibles": {

    "main-project-id": {
    "hébergement": {
    "deuxième-id-projet": [
    "deuxième-id-projet"
    ]
    }
    }
    }
    } `

  3. puis ouvrez le fichier firebase.json et assurez-vous qu'il contient les éléments suivants
    "target": "second-project-id",

Hmm, je ne sais pas exactement ce que j'ai fait pour le faire fonctionner, mais cela fonctionne actuellement avec ce .firebaserc :

{
  "projects": {
    "default": "mainProjectId"
  },
  "targets": {
    "mainProjectId": {
      "hosting": {
        "production": [
          "mainProjectId"
        ],
        "staging": [
          "secondProjectId"
        ]
      }
    }
  }
}
Cette page vous a été utile?
0 / 5 - 0 notes