Firebase-tools: Die Eigenschaft 'Bereitstellungen' von undefiniert kann nicht gelesen werden

Erstellt am 1. Mai 2019  ·  36Kommentare  ·  Quelle: firebase/firebase-tools

Umgebungsinformationen


Firebase-Tools:
[email protected]


Plattform:
Mac OS

Testfall

MacOS, Knoten 10.15.3, [email protected]

Schritte zum Reproduzieren

Erstellen Sie zwei Hosting-Sites auf der Firebase-Konsole.
Lauf
'Firebase- Ziel: Hosting-Entwickler
Lauf
'firebase deploy - nur Hosting: dev '

Erwartetes Verhalten

Bereitstellung erfolgreich

Tatsächliches Verhalten

[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

Hilfreichster Kommentar

Ich habe meine gelöst, indem ich sichergestellt habe:

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

Der Teil targets kann mit dem Befehl firebase target:apply hosting my-blog my-blog-host-id generiert werden

  1. firebase.json muss hosting als Array haben, und sein Element muss target: <TARGET_NAME>
{
  "hosting": [{
    "target": "my-blog",
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }]
}

Der wichtige Teil besteht darin, hosting einem Array zu machen und target zu seinem Element hinzuzufügen.

Alle 36 Kommentare

In letzter Zeit wurden einige Anpassungen in diesem Ablauf vorgenommen. Dieser Fehler kommt von (in der Quelle): https://github.com/firebase/firebase-tools/blob/master/src/deploy/index.js#L111

@Memeriaj kannst du einen Blick darauf werfen, wie du dich in letzter Zeit damit beschäftigt hast?

Ich glaube, ich weiß vielleicht, was hier los ist. Enthält Ihre firebase.json Konfigurationsdatei "target": "dev" ? Ich glaube, wir haben alle Konfigurationen herausgefiltert, die nicht mit hosintg:dev übereinstimmen, und wir haben ein leeres Array übrig gelassen. Wir haben dann alle Bereitstellungsschritte für dieses leere Array durchlaufen und praktisch nichts unternommen. Am Ende zeigen wir dann den Konsolenlink und den Link zu Ihrer neu bereitgestellten Hosting-Site an. Hier tritt dieser Fehler auf, weil wir eigentlich nichts bereitgestellt haben.

In diesem Fall benötigen wir definitiv einen ordnungsgemäßen Fehler, der erklärt, dass wir nichts bereitstellen.

(unabhängig vom Problem: Im Allgemeinen möchten Sie, dass Ihre Umschaltung auf Umgebungsebene auf Firebase-Projektebene und nicht auf verschiedenen Hosting-Sites innerhalb desselben Projekts erfolgt (obwohl Sie möglicherweise eine Site für ein Blog, eine Site für eine Web-App, und eine Site für Ihre Dokumente, die sich alle in derselben Umgebung auf verschiedenen Hosting-Sites im selben Projekt befinden. Dies liegt hauptsächlich daran, dass Dinge wie Firebase Auth nur eine einzige Instanz innerhalb eines Projekts haben. Idealerweise ist Ihre firebase.json -Datei Richten Sie es so ein, dass Sie in der Lage sind, so etwas wie firebase use dev , firebase deploy , überprüfen Sie den Entwickler, um sicherzustellen, dass die Dinge funktionieren, 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" ] } }

Ich denke, die Konfiguration, die Sie erwähnen, befindet sich in der Firebase-Bashrc-Datei und nicht in der Firebase-JSON-Datei.

Im Hosting-Bereich der Datei firebase.json müssen Sie "target": "dev" , damit firebase deploy --only hosting:dev funktioniert. Das --only -Flag funktioniert wie ein Filter und ohne das target -Feld in Ihrer Hosting-Konfiguration stellt die CLI nichts bereit (was ein Fehler mit einer nützlichen Nachricht sein sollte, aber im Moment nur blind akzeptiert es).

Entschuldigung, es ist nicht klar, wo im json das Zielfeld abgelegt werden soll. Würde ich dies an der Wurzel des json ablegen (es hat nicht funktioniert) oder sollte es sich im Stammverzeichnis des Hostings befinden (hat auch bei mir nicht funktioniert).

Auch meine Firebaserc-Datei verweist auf mein Root-Projekt, enthält jedoch keinen Verweis auf meine zweite Hosting-Site. Daher bin ich mir nicht sicher, wie das CLI-Tool verstehen kann, wo es bereitgestellt werden soll.

Es sollte sich im Hosting-Bereich Ihrer firebase.json -Datei befinden, damit es ungefähr so ​​aussieht:

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

Diese Dokumentseite enthält detailliertere Informationen zu den einzelnen Schritten und erläutert ein wenig, warum Sie möglicherweise auch Ziele und mehrere Websites verwenden.

Bei firebase target:apply hosting dev firebase-hosting-id firebase-hosting-id der Site-Name sein, auf dem Sie die Bereitstellung planen. Dadurch wird das Ziel für das Projekt festgelegt, für das Sie sich derzeit in der CLI befinden. Dies erfolgt über den Befehl firebase use . Aber vielleicht habe ich falsch verstanden, was Sie erreichen wollen.

Danke, ich scheine Fortschritte zu machen, aber jetzt bekomme ich eine 404-Fehlerentität, die nicht gefunden wurde.
Angenommen, mein Projekt in Firebase ist Reedy-1 und mein Ziel ist Reedy-1-API
Wenn ich mein Ziel beim Hosting als reedy-1-api hinzufüge, wenn ich versuche, es bereitzustellen, beschwert es sich, dass die Entität nicht gefunden wurde.
Ich kann in meiner Firebaserc-Datei unter Ziele sehen

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

Dieser Ausschnitt aus Ihrer .firebaserc -Datei sieht für mich korrekt aus.

Mögliche Probleme (Sie haben diese wahrscheinlich überprüft, aber ich liste sie auf, falls andere Leute später darauf stoßen):

  • Stellen Sie sicher, dass Sie das richtige Projekt mit firebase use
  • Stellen Sie sicher, dass die Projekt-ID korrekt ist (dies sollte für Sie über die Projektliste in firebase use --add ).
  • Stellen Sie sicher, dass der Site-Name korrekt ist (leicht zu finden über <site-name>.firebaseapp.com ).

Wenn Sie versuchen, mit dem Debug-Flag bereitzustellen, auf welchem ​​Teil wird der 404 zurückgegeben? Ich würde vermuten, dass es von POST https://firebasehosting.googleapis.com/v1beta1/sites/<site-name>/versions da dies die erste Anforderung der tatsächlichen Hosting-Bereitstellung ist. Wenn dies der Fall ist, würde ich denken, dass etwas mit dem Site-Namen, den Sie als Ziel eingerichtet haben, nicht stimmt. Wenn es sich vorher um eine Anfrage handelt, ist meine beste Vermutung, dass etwas mit Ihrem Projekt nicht stimmt.

Ok, es gelang mir herauszufinden, was los war.
Sie benötigen auch hierfür eine bessere Fehlermeldung. Wenn Sie also nicht in Flammen stehen und höher, ist die Fehlermeldung eine 404, und es ist nicht offensichtlich, dass ich sie aufgrund meines Preisplans nicht bereitstellen konnte.
Nach dem Upgrade, Boom, funktioniert alles.
Vielen Dank für die Hilfe, froh, dass dieses Problem geschlossen wurde.

Whoa, warte. Sie mussten ein Upgrade auf Blaze durchführen, damit Ihre Bereitstellung funktioniert? Was ist das, weil Sie die neue Hosting-Site noch nicht erstellt haben und dafür ein Upgrade benötigen? Oder hatten Sie zuvor ein Upgrade auf Blaze durchgeführt, eine zweite Hosting-Site erstellt, Ihren Abrechnungsplan herabgestuft und dann versucht, diese bereitzustellen?

Wissen Sie auch zufällig, welche Anfrage diesen Fehler ausgelöst hat? Da Sie Recht haben, ist dieser Fehler überhaupt nicht hilfreich, und ich möchte herausfinden, woher er stammt, damit ich ihm anstelle eines generischen 404-Textes eine Anleitung geben kann, was zu tun ist.

Ja, das ist richtig. Es ist ein wenig verwirrend. Ich bin mir ziemlich sicher, dass ich die zweite Site auf der kostenlosen Ebene erstellt habe. Dann hatte ich Probleme bei der Bereitstellung und dachte, es könnte so sein, also habe ich ein Upgrade durchgeführt. Als ich merkte, dass ich ein Problem mit Github ansprechen musste, stufte ich herunter, als ich dies tat, begannen seltsame Dinge in der Firebase-Webkonsole zu passieren. Die zweite Hosting-Website wird angezeigt, aber wenn ich darauf klicke, wird ein leerer Bildschirm angezeigt.
Nachdem ich Ihre Unterstützung erhalten hatte, habe ich versucht, sie bereitzustellen. Auf der Bereitstellung wurde ein 404 angezeigt. Also dachte ich, ich würde wieder auf Blaze upgraden und wie durch Zauberei funktionierte es.

mit dem gleichen Problem

@isevcik wirklich? Ich war mir ziemlich sicher, dass wir dieses Problem behoben haben (und ich hätte es wirklich schließen sollen). Haben Sie Ihr Projekt auf ähnliche Weise aktualisiert und anschließend heruntergestuft?

Sie sollten sich wahrscheinlich per E-Mail an den Support wenden, damit wir die Details Ihres Projekts abrufen und das Problem beheben können. Sie sollten sicherstellen, dass Sie dieses GitHub-Problem und mich erwähnen, damit sie wissen, an wen sie es senden sollen.

@isevcik Ich habe den gleichen Fehler erhalten und dachte, ich hätte das gleiche Problem, aber es stellte sich als Tippfehler in der Projekt-ID in .firebaserc heraus.
Ich habe diesen Befehl verwendet, um diese Ziele hinzuzufügen, anstatt ihn manuell auszuführen, und es hat funktioniert.
Hinweis: Sie müssen das Ziel auch zur Datei firebase.json hinzufügen.

Firebase- Ziel: Wenden Sie den Typ Zielname Ressourcenname an

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

Hallo, gleiches Problem:

[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 Ich bekomme auch diesen Fehler. Hast du es gelöst? Wenn ja, was haben Sie geändert?

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

Wurde dies für jemanden behoben, der den Support kontaktiert hat, wie von @Memeriaj vorgeschlagen? Wenn ja, könnten die Details hier zur späteren Bezugnahme veröffentlicht werden?

@ MaxInertia ja ich habe es gelöst, ich habe meine gesamte Maschine formatiert und gelöscht :-)

Ich denke, es löst nur diesen Fehler aus, wenn es das Bereitstellungsziel in Ihrer Konfiguration nicht finden kann. Ich würde Ihre Konfiguration in den beiden Konfigurations-Firebase-Dateien überprüfen. Veröffentlichen Sie den Inhalt hier oben, wenn Sie eine zweite Meinung wünschen.

Gleiches gilt hier, wenn versucht wird, eine sekundäre Website mit Firebase 7.3.1 bereitzustellen

Eigentlich war Fehler in firebase.json, ich habe falsches "Ziel" angegeben

Ich konnte dieses Problem beheben, indem ich mithilfe dieses Handbuchs ein neues Bereitstellungsziel erstellte:

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

Ich habe einen Befehl erteilt:

firebase target:apply hosting blog myapp

und fügte hinzu , target Schlüssel zu meinem firebase.json

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

Bearbeiten: Ich bin auf dieses Problem eingegangen, als ich mein erstes Hosting für mein brandneues Firebase-Projekt eingerichtet habe.

Ich konnte es auch lösen. Mein Problem war , dass , wenn ich mein deploy Ziel geschaffen , die in der Dokumentation beschriebenen Befehl: Feuerbasis $ target: apply Ziel-name Ressource-Name - Hosting, hatte ich mein Hauptprojekt als Ressource Namen setzen. Ich habe das in der .firebaserc-Datei geändert und den Befehl firebase deploy ausgeführt, und es hat funktioniert. Beispiel unten:

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

Hallo, ich stehe auch vor dem gleichen Problem, etwas anders (für benutzerdefinierte hinzugefügte Domain)

Ich kann in mehreren Hosting mit unterschiedlichen Zielnamen bereitstellen. aber wenn ich versuche, in meiner benutzerdefinierten hinzugefügten Domäne bereitzustellen. Ich erhalte Fehler: HTTP Fehler: 404, Angeforderte Entität wurde nicht gefunden.

Meine benutzerdefinierte Domain ist 3dprinter.froozen.in (hinzugefügt zu Firebase innerhalb des Standardhostings durch Klicken auf die Schaltfläche Benutzerdefinierte Domain hinzufügen)
Meine benutzerdefinierte Domäne wird in der Standarddomäne meines Projekts hinzugefügt.
Bitte helfen Sie mir, weiterzumachen

Wir benötigen Debug-Protokolle, die den genauen fehlgeschlagenen Aufruf anzeigen, um helfen zu können
diagnostizieren Sie das Problem.

Am Samstag, 4. Januar 2020, 00:52 Uhr schrieb nandha [email protected] :

Hallo, ich bin auch mit dem gleichen Problem konfrontiert, etwas anders (für benutzerdefinierte
Domain hinzugefügt)

Ich kann in mehreren Hosting mit unterschiedlichen Zielnamen bereitstellen. aber
wenn ich versuche, in meiner benutzerdefinierten hinzugefügten Domäne bereitzustellen. Ich erhalte den Fehler: HTTPFehler: 404, Angeforderte Entität wurde nicht gefunden.

Meine benutzerdefinierte Domain ist 3dprinter.froozen.in (hinzugefügt zu firebase inside
Standardhosting durch Klicken auf die Schaltfläche Benutzerdefinierte Domain hinzufügen)
Meine benutzerdefinierte Domäne wird in der Standarddomäne meines Projekts hinzugefügt.
Bitte helfen Sie mir, weiterzumachen

- -
Sie erhalten dies, weil Sie diesen Thread abonniert haben.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/1232?email_source=notifications&email_token=AAAAH7SNCPUEIMIWCDHK6CDQ4BE4JA5CNFSM4HJWK5J2YY3PNVWWK3TUL52HS4W4W4M3
oder abbestellen
https://github.com/notifications/unsubscribe-auth/AAAAH7V26G3YF6Q7FYDP5QTQ4BE4JANCNFSM4HJWK5JQ
.

Hallo @mbleigh ,

Ich habe mein Problem gelöst

  1. Domain war nicht vollständig verknüpft
  2. Firebase.json des Hostings wurde gemäß Dokumentation geändert
    Wenn beide erledigt sind, hat es wie erwartet ordnungsgemäß funktioniert

Wenn keine weiteren Abfragen vorliegen, können wir dieses Problem schließen
Bei Fragen kommentieren Sie bitte unten

Mein Problem mit "Fehler: HTTP-Fehler: 404, angeforderte Entität wurde nicht gefunden" habe ich versucht zu verwenden

`` `
"Ziele": {
"Projektname": {
"Hosting": {
"dev": [
"dev.site.com"
],
"prod": [
"site.com"
]]
}}
}}
}}


istead of

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

Ich habe meine gelöst, indem ich sichergestellt habe:

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

Der Teil targets kann mit dem Befehl firebase target:apply hosting my-blog my-blog-host-id generiert werden

  1. firebase.json muss hosting als Array haben, und sein Element muss target: <TARGET_NAME>
{
  "hosting": [{
    "target": "my-blog",
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }]
}

Der wichtige Teil besteht darin, hosting einem Array zu machen und target zu seinem Element hinzuzufügen.

Ich wurde auch heute davon getroffen, die Konvertierung von firebase.json hosting in Array ist wirklich schmerzhaft!

Jetzt muss ich jeden Eintrag duplizieren (auch wenn er bis auf das Ziel derselbe ist), der viele Header-Konfigurationen für alle Umgebungen hat. Das ist plötzlich die 4x JSON-Konfiguration, die ich verwalten muss.

Wie auch immer, um Standard-Hosting von Firebase JSON wiederzuverwenden?

Mehrere Sites im selben Projekt sind nicht als "Umgebungen" vorgesehen. Wenn Sie eine "Staging" -, "Dev" usw.-Site haben, sollten dies Sites in verschiedenen Projekten sein, und der Befehl firebase use kann helfen Sie wechseln unabhängig voneinander zwischen ihnen und stellen sie bereit.

Wenn dies nicht der Fall ist, können Sie mir helfen, zu verstehen, warum die Konfiguration firebase.json für jede der Sites in Ihrem Projekt identisch ist?

Nun, das fasst es ziemlich gut zusammen. Wir haben derzeit 4 verschiedene Umgebungen in verschiedenen GCP-Projekten. Wir mussten jedoch eine temporäre Umgebung bereitstellen (die andere Teile enthält, nicht nur Firebase-Hosting) GCP-Projekt für ein oder zwei Monate, anstatt ein brandneues hinzuzufügen.

Die einzige Möglichkeit, diese atm zu erreichen, besteht darin, die Hostkonfiguration von firebase.json fünfmal zu duplizieren und jeder Konfiguration ein eindeutiges Ziel hinzuzufügen.

Ich denke, woher die Verwirrung kommt, wenn Sie eine Standard-Hosting-Konfiguration haben, ist zu erwarten, dass sie mit jedem Ziel oder Projekt funktioniert, aber ich denke, das ist mein Missverständnis darüber, wie es von verschiedenen Projekten im Vergleich zu Projekt + Ziel verwendet wird.

Offensichtlich kann es immer noch funktionieren, es dauerte nur eine Weile, bis ich verstanden habe, warum dieser Fehler aufgetreten ist.
2020-06-22T17:20:39.837Z] TypeError: Cannot read property 'deploys' of undefined

Die Fehlermeldung ist auf jeden Fall schlecht, und FWIW haben wir eine bessere Lösung für "kurzlebige Vorschauen", die derzeit entwickelt werden 😄

Um dem "Array-Fix" hinzuzufügen, haben wir zwei Sites bereitgestellt. Ich konnte die richtige Site als Ziel festlegen, nachdem ich die Ziele in ein Array geändert hatte:

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

Aber dann gab der "Administrator" eine leere Seite zurück, da wir React verwenden. Der Trick bestand darin, den öffentlichen Punkt zum Erstellen zu haben.
"public": "build",

Ich stoße auf dieses Problem und alles ist gemäß den obigen Angaben und den Dokumenten korrekt. Trotzdem bekomme ich immer noch den Fehler. Egal welches Ziel ich verwende, es scheint das nicht zu respektieren, obwohl alle Dateien und Einstellungen als korrekt gemeldet werden. Gibt es noch etwas, das oben nicht behandelt wurde?

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

  2. Öffnen Sie dann die .firebaserc-Datei und stellen Sie sicher, dass sie wie folgt aussieht
    `{
    "Ziele": {

    "Hauptprojekt-ID": {
    "Hosting": {
    "zweite Projekt-ID": [
    "zweite Projekt-ID"
    ]]
    }}
    }}
    }}
    } `

  3. Öffnen Sie dann die Datei firebase.json und stellen Sie sicher, dass sie Folgendes enthält
    "Ziel": "zweite Projekt-ID",

Hmm, ich weiß nicht genau, was ich getan habe, damit es funktioniert, aber es funktioniert derzeit mit diesem .firebaserc :

{
  "projects": {
    "default": "mainProjectId"
  },
  "targets": {
    "mainProjectId": {
      "hosting": {
        "production": [
          "mainProjectId"
        ],
        "staging": [
          "secondProjectId"
        ]
      }
    }
  }
}
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen