Firebase-tools: Firestore et émulateur de base de données : initialisation d'une instance avec un jeu de données

CrĂ©Ă© le 12 mars 2019  Â·  39Commentaires  Â·  Source: firebase/firebase-tools

Ce serait formidable d'avoir la possibilité de créer une instance de l'émulateur Firestore avec un ensemble de données.

Actuellement, nous effectuons une écriture par lots pour initialiser ou réinitialiser une instance d'un émulateur. Le problÚme est qu'il faut prÚs de 3s pour une mise à jour de 120 opérations (notre jeu de données de test).

Serait-il possible de créer une instance d'émulateur Firestore à partir d'un snapshot ou d'améliorer les performances de l'émulateur pour les grosses mises à jour ?

emulator-suite database firestore feature request

Commentaire le plus utile

La possibilité d'importer des données dans l'émulateur Firestore (c'est-à-dire de l'initialiser avec des données "seed") devrait disparaßtre avec la prochaine version. Ce sera un peu manuel au début, nous ajouterons de meilleurs outils dans les versions suivantes.

Examiner ce qui serait nécessaire pour l'émulateur de base de données en temps réel.

Tous les 39 commentaires

Je suis d'accord qu'il serait formidable de charger un "instantané" de base de données lors de l'initialisation. J'exécute actuellement le firestore et les émulateurs de fonctions localement pour le développement, mais lorsque j'ensemence la base de données avec des données de test, un tas de déclencheurs de fonction firestore sont exécutés. C'est assez indésirable, donc existe-t-il des plans pour une fonctionnalité pour aider au chargement des données initiales ou, mieux encore, la persistance des données Firestore sur le disque ?

Merci d'avoir soulevé le point de vouloir semer des données sans fonctions
cuisson. En guise de palliatif, nous pourrions certainement mettre en Ɠuvre un moyen de « tourner
off" se déclenche avec un appel spécial pendant que vous chargez des données.
pourrait ĂȘtre utile pour certains tests aussi. L'utiliseriez-vous ?

Mais pour le long terme, nous avons besoin d'import/export.

Le samedi 12 octobre 2019 Ă  11 h 54, Wyatt Ades [email protected] a Ă©crit :

Je suis d'accord que ce serait génial de charger un "instantané" de base de données sur
initialisation. Je lance actuellement les Ă©mulateurs firestore et fonctions
localement pour le développement, mais quand j'ensemence la base de données avec des données de test, un tas
des déclencheurs de fonction firestore sont exécutés. C'est assez indésirable, donc
existe-t-il des plans pour une fonctionnalité pour aider au chargement des données initiales ou,
encore mieux, la persistance des données Firestore sur le disque ?

-
Vous recevez ceci parce que vous ĂȘtes abonnĂ© Ă  ce fil.
RĂ©pondez directement Ă  cet e-mail, consultez-le sur GitHub
https://github.com/firebase/firebase-tools/issues/1167?email_source=notifications&email_token=ACATB2VEE7BBI75HECFTE23QOIMOLA5CNFSM4G5NG5X2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVX52ZHJKTDN5GB5X2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVX52ZHJKTDN5GB
ou se désinscrire
https://github.com/notifications/unsubscribe-auth/ACATB2WHUTO43JISN54J4U3QOIMOLANCNFSM4G5NG5XQ
.

Oui ce serait une bonne solution pour le moment, merci !

Donc, il n'y a pas encore de jalons fixĂ©s pour cela? mais une chose que j'aime maintenant Ă  propos de cette Ă©quipe ici, c'est qu'elle semble ĂȘtre plus active et rĂ©active.

les gars peuvent-ils s'il vous plaßt ajouter une base de données en temps réel également dans la portée de cela avec firestore db.

@anantanandgupta pas encore de jalons, mais oui, nous essayons d'ĂȘtre vraiment ouverts sur nos progrĂšs ! Et j'ai ajoutĂ© l'Ă©mulateur de base de donnĂ©es pour qu'il soit Ă©galement dans la portĂ©e. Pour Database le problĂšme est plus simple (format JSON) mais il faut quand mĂȘme vous aider Ă  "mettre en pause" les Cloud Functions

Je sais que je suis entre de bonnes mains. Mais pour vous dire la criticitĂ©, j'ai conçu cette Ă©norme plate-forme entiĂšrement autour de firebase et tout le monde Ă©tait contre cela, mais avec mes efforts, j'ai prouvĂ© jusqu'Ă  prĂ©sent que ma dĂ©cision d'utiliser firebase comme technologie n'Ă©tait pas mauvaise. À ce stade, il est devenu si important que travailler sur plusieurs fonctionnalitĂ©s par plusieurs dĂ©veloppeurs avec une base de donnĂ©es commune hĂ©bergĂ©e sur le cloud est devenu impossible. Donc si chacun de nous peut travailler sur une copie locale de la base de donnĂ©es, ce sera beaucoup plus simple et efficace.

La possibilité d'importer des données dans l'émulateur Firestore (c'est-à-dire de l'initialiser avec des données "seed") devrait disparaßtre avec la prochaine version. Ce sera un peu manuel au début, nous ajouterons de meilleurs outils dans les versions suivantes.

Examiner ce qui serait nécessaire pour l'émulateur de base de données en temps réel.

@ryanpbrewster existe-t-il une documentation sur la configuration des données "seed" ?

@SamyPesse, cela a Ă©tĂ© implĂ©mentĂ© dans le JAR de l'Ă©mulateur lui-mĂȘme (comme l' a dit firebase-tools pour effectuer l'importation, ce n'est donc pas vraiment quelque chose que vous pouvez utiliser pour le moment.

Cela vous dérangerait-il de partager comment vous vous attendriez à ce que cela fonctionne ? Préféreriez-vous un drapeau sur la commande firebase , un champ dans firebase.json ou autre chose ?

L'importation et l'exportation de données sont actuellement implémentées, mais nous n'avons pas tout à fait compris comment faciliter l'utilisation de ces fonctionnalités. Gardez donc à l'esprit que nous savons que ces instructions sont approximatives et que nous sommes ouverts aux idées sur la façon d'améliorer cela :

Obtenir une exportation

Vous pouvez générer une exportation depuis votre instance Firestore de production ou depuis l'émulateur local.

Exportation de l'Ă©mulateur

Démarrez l'émulateur et remplissez-le avec les données comme vous le souhaitez. Une fois que vous avez votre base de données dans un état qui vous convient, créez une exportation :

curl "localhost:8080/emulator/v1/projects/ryanpbrewster-test:export" \
  -d '{"database": "projects/ryanpbrewster-test/databases/(default)","export_directory":"."}' \
  -H "Content-Type: application/json

qui videra l'exportation sur votre systÚme de fichiers local dans un répertoire comme firestore_export_1576524691/

Exportation de la production

Vous aurez besoin d'un bucket Google Cloud Storage. J'utiliserai le bucket AppEngine par défaut de mon projet de test ryanpbrewster-test.appspot.com . Courir

gcloud firestore export gs://ryanpbrewster-test.appspot.com/firestore-export

et Firestore transférera une copie complÚte de vos données de production dans Google Cloud Storage. Si vous le souhaitez, vous pouvez utiliser l'indicateur --collection-ids pour limiter l'exportation à un ensemble spécifique de collections.

Une fois que c'est fait, vous pouvez le copier sur votre systÚme de fichiers local (notez que cela va mal se passer si vous avez une énorme base de données):

gsutil cp -r gs://ryanpbrewster-test.appspot.com/firestore-export .

Importer des données

Pour l'instant, le seul moyen d'importer des données dans l'émulateur est via un indicateur de ligne de commande :

java -jar ~/.cache/firebase/emulators/cloud-firestore-emulator-v1.10.2.jar \
  --seed_from_export=firestore_export_1576524691/firestore_export_1576524691.overall_export_metadata

Si tout se passe bien, l'émulateur démarrera et contiendra toutes vos données.

Notez que le chemin attendu est l'emplacement du fichier .overall_export_metadata , qui doit se trouver au niveau supérieur du répertoire d'exportation.

J'ai pu Ă©muler les donnĂ©es Firestore de l'exportation. Maintenant, si j'essaie de dĂ©marrer le costume d'Ă©mulateur Firebase. L'Ă©mulateur Firestore ne fonctionne pas car l'Ă©mulateur est dĂ©jĂ  en cours d'exĂ©cution sur le port. J'ai mĂȘme essayĂ© de dĂ©finir la variable FIRESTORE_EMULATOR_HOST qu'elle ne reconnaĂźt pas. Si le chemin de la graine peut Ă©galement ĂȘtre transmis le long de la commande lors du dĂ©marrage de l'Ă©mulateur, cela sera beaucoup plus utile et rĂ©duira beaucoup de temps de dĂ©veloppement comme firebase emulators:start --firestore_seed_from_export = \path\to\seed\file

+1 pour la suggestion de

@prgwar merci pour votre suggestion, nous travaillons actuellement sur le choix de l'API pour spécifier l'import/export à partir de la commande firebase . L'utilisation directe de jar n'est qu'une solution de contournement et non quelque chose que nous attendons des développeurs à long terme.

@srolfe26 votre problÚme semble différent, vous exécutez l'émulateur Cloud Functions mais pas l'émulateur Firestore. Essayez d'exécuter firebase init emulators pour initialiser l'émulateur Firestore, puis exécutez à nouveau firebase emulators:start .

Pour tous les autres utilisateurs de WSL (1 ou 2), vous pouvez avoir des difficultés à vous connecter à l'émulateur à partir de votre navigateur. J'ai ajouté un indicateur --host 0.0.0.0 à la commande ci-dessus et cela a résolu le problÚme.

java -jar ~/.cache/firebase/emulators/cloud-firestore-emulator-v1.10.2.jar \
  --seed_from_export=firestore_export_1576524691/firestore_export_1576524691.overall_export_metadata \
  --host 0.0.0.0

Est- ce que la suggestion de @prgwar d'utiliser --firestore_seed_from_export=ĂȘtre acceptable ?

Si oui, je suis prĂȘt Ă  mettre en place un PR. Comment puis-je aider Ă  lancer le bal ?

J'aimerais Ă©galement que la mĂȘme fonctionnalitĂ© seed_from_export puisse ĂȘtre implĂ©mentĂ©e sur l'Ă©mulateur Realtime Database.

@spencerwhyte merci pour l'offre ! Je m'attaque activement Ă  cela en ce moment, en travaillant sur quelque chose qui prendra en charge Firestore et RTDB ainsi que tous les futurs Ă©mulateurs.

Que pensez-vous de ce flux général :

  • Une "sauvegarde" est un dossier qui contient :

    • Un tas de sauvegardes d'Ă©mulateurs individuels dans leurs formats canoniques

    • Un seul fichier metadata.json qui les dĂ©crit

  • Pour dĂ©marrer les Ă©mulateurs avec une graine, faites : firebase emulators:start --import="./folder-with-backup"
  • Pour effectuer une sauvegarde des Ă©mulateurs en cours d'exĂ©cution, ouvrez un nouveau terminal pendant qu'ils sont en cours d'exĂ©cution et effectuez firebase emulators:export

C'est ce sur quoi je travaille actuellement, je pense que c'est la chose la plus flexible mais je suis trĂšs ouvert aux retours

@samtstern C'est bon Ă  entendre !

Cette conception semble parfaite, tant que le format d'exportation / format de sauvegarde de l'Ă©mulateur est quelque chose avec lequel nous pouvons travailler. Si c'est le mĂȘme format que les sauvegardes en production, ça ira. Nous avons besoin d'importer une grande quantitĂ© de donnĂ©es pour nos tests d'intĂ©gration sans dĂ©clencher nos dĂ©clencheurs. Actuellement, nous avons survĂ©cu en effectuant des vĂ©rifications qui dĂ©sactivent les dĂ©clencheurs lors des tests, mais nous aimerions Ă©viter cette complexitĂ©. Ce support de --import va nous permettre de simplifier les choses.

Nous utilisons firebase emulators:exec pour nos tests, donc tant que cela fonctionnera Ă©galement avec exec , nous serions heureux.

@spencerwhyte

1) Oui, nous allons certainement nous en tenir aux mĂȘmes formats que la production dans la mesure du possible. Donc, pour Firestore, nous prendrons en charge le format d'import/export et pour RTDB, ce sera juste un fichier gĂ©ant json .
2) Oui, nous prendrons en charge emulators:exec --import

Merci pour les commentaires!

PR #1968 implémente cette fonctionnalité (pour Firestore uniquement pour le moment, la base de données en temps réel sera bientÎt disponible) et sera incluse dans la prochaine version de la CLI (probablement 7.14.0 )

Cette fonctionnalitĂ© vient d'ĂȘtre publiĂ©e dans 7.14.0 ... essayez-la et dites-nous ce que vous en pensez ! Pour le moment, il s'agit uniquement de Firestore, mais la base de donnĂ©es en temps rĂ©el est la suivante.

Est-ce documenté quelque part ? Existe-t-il également un moyen d'exporter les données de production sans bucket Google Cloud Storage (que je n'ai pas) ?
Avoir du mal à tester les déclencheurs localement sans données répliquées à partir de la banque de données cloud.

@shaimo désolé nous sommes un peu en retard sur les docs mais ils devraient sortir dans les prochains jours !

Pour exporter à partir de la production, vous avez besoin d'un bucket Cloud Storage. En effet, l'exportation est une opération "gérée", ce qui signifie qu'elle se produit quelque part sur un serveur Google. Nous ne pouvons pas exécuter une telle opération sur votre systÚme de fichiers local, nous avons besoin d'une destination cloud.

Si vous avez un projet Firebase, vous disposez en fait d'un bucket Cloud Storage par défaut que vous pouvez utiliser et qui inclut un quota gratuit. Accédez simplement à la section Stockage de la console Firebase pour le vérifier.

@samtstern Comme la documentation peut prendre un certain temps, pouvez-vous expliquer comment importer/exporter vers une instance d'émulateur ?

Nous avons maintenant de la documentation sur les nouveaux drapeaux ici :
https://firebase.google.com/docs/emulator-suite/install_and_configure#startup

Mais laissez-moi vous donner un exemple quand mĂȘme. Pour utiliser l'import/export, vous aurez besoin de deux fenĂȘtres de terminal, appelons-les donc Terminal 1 et Terminal 2

DĂ©marrez d'abord les Ă©mulateurs

Terminal 1

$ firebase emulators:start
# ...

AprÚs avoir créé des données que vous souhaitez enregistrer, exécutez la commande d'exportation dans un autre terminal :

Terminal 2

$ firebase emulators:export ./mydirectory
# ...

Vous avez maintenant un export en ./mydirectory . La prochaine fois que vous démarrez les émulateurs, dites-leur d'importer à partir de là :

Terminal 1

$ firebase emulators:start --import=./mydirectory
# ...

Et c'est tout!

@samtstern Pouvons-nous importer à partir d'une exportation de production à l'aide de la commande firebase emulators:start --import ?
Je vois que les Ă©mulateurs:start --import recherche firebase-export-metadata.json mais j'ai firestore-export/firestore-export.overall_export_metadata

@landonj tu peux mais c'est un peu délicat en ce moment. La chose la plus simple à faire est d'exécuter emulators:export une fois, puis de modifier les fichiers JSON pour pointer vers votre exportation de production plutÎt que vers celle locale.

Quelque chose sur l'ensemencement de RTDB pour l'émulateur pour le moment ?

@FergyKay rien encore mais vous pouvez suivre ici :
https://github.com/firebase/firebase-tools/issues/2079

C'est bien nécessaire

J'essaye de faire exactement la mĂȘme chose que

et j'ai essayé ce que @samtstern a dit ... mais je reçois une erreur ...

Qu'est-ce que je fais mal ?

bdw.. le fichier existe !

firebase emulators:start --debug --only firestore,functions --import=/Users/ridermansb/Projects/meve.ai/backups/emulator-data

[2020-05-31T13:31:23.601Z] com.google.cloud.datastore.core.exception.DatastoreException : échec de l'analyse du fichier de métadonnées d'exportation global
sur com.google.cloud.datastore.emulator.impl.ExportImportUtil.parseOverallMetadataFile(ExportImportUtil.java:225)
sur com.google.cloud.datastore.emulator.impl.ExportImportUtil.fetchEntities(ExportImportUtil.java:54)
sur com.google.cloud.datastore.emulator.firestore.CloudFirestore.main(CloudFirestore.java:89)
{"metadata":{"emulator":{"name":"firestore"},"message":"com.google.cloud.datastore.core.exception.DatastoreException : échec de l'analyse du fichier de métadonnées d'exportation global\n\tat com.google.cloud.datastore.emulator.impl.ExportImportUtil.parseOverallMetadataFile(ExportImportUtil.java:225)\n\tat com.google.cloud.datastore.emulator.impl.ExportImportUtil.fetchEntities(ExportImportUtil.java:54)\n \tat com.google.cloud.datastore.emulator.firestore.CloudFirestore.main(CloudFirestore.java:89)\n"}}
[2020-05-31T13:31:23.602Z] Causé par : java.io.FileNotFoundException : /Users/ridermansb/Projects/meve.ai/backups/emulator-data/Users/ridermansb/Projects/meve.ai/backups/ 2020-05-31/2020-05-31/2020-05-31T13:19:28_6168.overall_export_metadata (Aucun tel fichier ou répertoire)
{"metadata":{"emulator":{"name":"firestore"},"message":"Causé par : java.io.FileNotFoundException : /Users/ridermansb/Projects/meve.ai/backups/emulator-data /Users/ridermansb/Projects/meve.ai/backups/2020-05-31/2020-05-31/2020-05-31T13:19:28_6168.overall_export_metadata (Aucun tel fichier ou répertoire)\n"}}
[2020-05-31T13:31:23.603Z] sur java.base/java.io.FileInputStream.open0 (méthode native)
sur java.base/java.io.FileInputStream.open(FileInputStream.java:213)
sur java.base/java.io.FileInputStream.(FileInputStream.java:155)
sur com.google.cloud.datastore.emulator.impl.ExportImportUtil.parseOverallMetadataFile(ExportImportUtil.java:215)
... 2 plus
{"metadata":{"emulator":{"name":"firestore"},"message":"\tat java.base/java.io.FileInputStream.open0(MĂ©thode native)\n\tat java.base/ java.io.FileInputStream.open(FileInputStream.java:213)\n\tat java.base/java.io.FileInputStream.(FileInputStream.java:155)\n\tat com.google.cloud.datastore.emulator.impl.ExportImportUtil.parseOverallMetadataFile(ExportImportUtil.java:215)\n\t... 2 de plus\n"}}

Erreur : Firestore : L'émulateur Firestore s'est fermé avec le code : 1

@landonj tu peux mais c'est un peu délicat en ce moment. La chose la plus simple à faire est d'exécuter emulators:export une fois, puis de modifier les fichiers JSON pour pointer vers votre exportation de production plutÎt que vers celle locale.

Pouvez-vous développer davantage sur ce sujet? Puis-je pointer directement vers le bucket gcloud ? Ou dois-je d'abord télécharger le contenu de l'export localement ? Quels fichiers dois-je modifier ?

Voici ce que j'ai tenté :

> firebase emulators:start
> firebase emulators:export ~/emulator-data/
> # close the emulator
> gcloud firestore export gs://xxxxx-xxxxx-xxxxx/emulator/
> gsutil cp -r gs://xxxxx-xxxxx-xxxxx/emulator ~/emulator-data/
> firebase emulators:start --only firestore --import /home/gugahoi/emulator-data/emulator/ --debug
[2020-06-01T10:04:36.492Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2020-06-01T10:04:36.493Z] > authorizing via signed-in user
i  emulators: Starting emulators: firestore {"metadata":{"emulator":{"name":"hub"},"message":"Starting emulators: firestore"}}
[2020-06-01T10:04:36.510Z] [hub] writing locator at /tmp/hub-flux-development.json
i  emulators: Shutting down emulators. {"metadata":{"emulator":{"name":"hub"},"message":"Shutting down emulators."}}
i  hub: Stopping emulator hub {"metadata":{"emulator":{"name":"hub"},"message":"Stopping emulator hub"}}
[2020-06-01T10:04:36.825Z] Error: ENOENT: no such file or directory, open '/home/gugahoi/emulator-data/emulator/firebase-export-metadata.json'
    at Object.openSync (fs.js:458:3)
    at Object.readFileSync (fs.js:360:35)
    at Object.<anonymous> (/home/gugahoi/.nvm/versions/node/v12.16.3/lib/node_modules/firebase-tools/lib/emulator/controller.js:183:44)
    at Generator.next (<anonymous>)
    at fulfilled (/home/gugahoi/.nvm/versions/node/v12.16.3/lib/node_modules/firebase-tools/lib/emulator/controller.js:5:58)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

Error: An unexpected error has occurred.

Comme ce qui précÚde ne semble pas fonctionner, j'ai mis à jour le fichier firebase-exports-metadata.json avec le contenu suivant :

> cat firebase-export-metadata.json
{"version":"8.4.1","firestore":{"version":"1.11.4","path":"emulator","metadata_file":"emulator/emulator.overall_export_metadata"}}

Ci-dessous la structure du répertoire :

gugahoi:~/emulator-data > tree .
.
├── emulator
│   ├── all_namespaces
│   │   └── all_kinds
│   │       ├── all_namespaces_all_kinds.export_metadata
│   │       ├── output-0
│   │       └── output-1
│   └── emulator.overall_export_metadata
├── firebase-export-metadata.json
├── firebase-export-metadata.json.bak
└── firestore_export
    └── firestore_export.overall_export_metadata

Cependant, je n'ai toujours pas de données dans l'interface utilisateur de l'émulateur.

Éditer

Je pensais juste que j'ajouterais la sortie finale de l'émulateur, il s'exécute sans erreur mais sans mes données :

> firebase emulators:start --only firestore --import /home/gugahoi/emulator-data/ --debug
[2020-06-01T11:31:34.256Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2020-06-01T11:31:34.257Z] > authorizing via signed-in user
i  emulators: Starting emulators: firestore {"metadata":{"emulator":{"name":"hub"},"message":"Starting emulators: firestore"}}
[2020-06-01T11:31:34.274Z] [hub] writing locator at /tmp/hub-flux-development.json
i  firestore: Importing data from /home/gugahoi/emulator-data/emulator/emulator.overall_export_metadata {"metadata":{"emulator":{"name":"firestore"},"message":"Importing data from /home/gugahoi/emulator-data/emulator/emulator.overall_export_metadata"}}
[2020-06-01T11:31:34.302Z] Ignoring unsupported arg: projectId {"metadata":{"emulator":{"name":"firestore"},"message":"Ignoring unsupported arg: projectId"}}
[2020-06-01T11:31:34.303Z] Ignoring unsupported arg: auto_download {"metadata":{"emulator":{"name":"firestore"},"message":"Ignoring unsupported arg: auto_download"}}
[2020-06-01T11:31:34.303Z] Starting Firestore Emulator with command {"binary":"java","args":["-Duser.language=en","-jar","/home/gugahoi/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.4.jar","--host","localhost","--port",8080,"--seed_from_export","/home/gugahoi/emulator-data/emulator/emulator.overall_export_metadata","--rules","/home/gugahoi/projects/flux/flux/firestore.rules"],"optionalArgs":["port","webchannel_port","host","rules","functions_emulator","seed_from_export"],"joinArgs":false} {"metadata":{"emulator":{"name":"firestore"},"message":"Starting Firestore Emulator with command {\"binary\":\"java\",\"args\":[\"-Duser.language=en\",\"-jar\",\"/home/gugahoi/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.4.jar\",\"--host\",\"localhost\",\"--port\",8080,\"--seed_from_export\",\"/home/gugahoi/emulator-data/emulator/emulator.overall_export_metadata\",\"--rules\",\"/home/gugahoi/projects/flux/flux/firestore.rules\"],\"optionalArgs\":[\"port\",\"webchannel_port\",\"host\",\"rules\",\"functions_emulator\",\"seed_from_export\"],\"joinArgs\":false}"}}
i  firestore: Firestore Emulator logging to firestore-debug.log {"metadata":{"emulator":{"name":"firestore"},"message":"Firestore Emulator logging to \u001b[1mfirestore-debug.log\u001b[22m"}}
[2020-06-01T11:31:35.197Z] API endpoint: http://localhost:8080
 {"metadata":{"emulator":{"name":"firestore"},"message":"API endpoint: http://localhost:8080\n"}}
[2020-06-01T11:31:35.198Z] If you are using a library that supports the FIRESTORE_EMULATOR_HOST environment variable, run:

   export FIRESTORE_EMULATOR_HOST=localhost:8080

Dev App Server is now running.

 {"metadata":{"emulator":{"name":"firestore"},"message":"If you are using a library that supports the FIRESTORE_EMULATOR_HOST environment variable, run:\n\n   export FIRESTORE_EMULATOR_HOST=localhost:8080\n\nDev App Server is now running.\n\n"}}
[2020-06-01T11:31:35.322Z] Ignoring unsupported arg: auto_download {"metadata":{"emulator":{"name":"ui"},"message":"Ignoring unsupported arg: auto_download"}}
[2020-06-01T11:31:35.322Z] Ignoring unsupported arg: port {"metadata":{"emulator":{"name":"ui"},"message":"Ignoring unsupported arg: port"}}
[2020-06-01T11:31:35.323Z] Starting Emulator UI with command {"binary":"node","args":["/home/gugahoi/.cache/firebase/emulators/ui-v1.0.0/server.bundle.js"],"optionalArgs":[],"joinArgs":false} {"metadata":{"emulator":{"name":"ui"},"message":"Starting Emulator UI with command {\"binary\":\"node\",\"args\":[\"/home/gugahoi/.cache/firebase/emulators/ui-v1.0.0/server.bundle.js\"],\"optionalArgs\":[],\"joinArgs\":false}"}}
i  ui: Emulator UI logging to ui-debug.log {"metadata":{"emulator":{"name":"ui"},"message":"Emulator UI logging to \u001b[1mui-debug.log\u001b[22m"}}
[2020-06-01T11:31:35.395Z] Web / API server started at http://localhost:4000
 {"metadata":{"emulator":{"name":"ui"},"message":"Web / API server started at http://localhost:4000\n"}}

┌───────────────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! View status and logs at http://localhost:4000 │
└───────────────────────────────────────────────────────────────────────┘

┌───────────┬────────────────┬─────────────────────────────────┐
│ Emulator  │ Host:Port      │ View in Emulator UI             │
├───────────┌────────────────┌──────────────────────────────────
│ Firestore │ localhost:8080 │ http://localhost:4000/firestore │
└───────────┮────────────────┮─────────────────────────────────┘
  Other reserved ports: 4400, 4500

Issues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files.

@gugahoi votre message m'a aidé à trouver une solution : https://gist.github.com/bkuri/36cef71bcf30a5416b1c353cb81f38ed

C'est un petit script bash qui amorce votre instance d'émulateur de stockage cloud. Tout ce dont il a besoin est le nom du projet et un chemin de destination pour enregistrer les données exportées. c'est-à-dire : ./seed-storage.sh my-project /tmp/export .

BTW, le script ci-dessus dépend de deux outils trÚs courants ( lsof et screen ) en plus des suspects habituels ( firebase , gcloud et gsutil ), alors assurez-vous de les avoir installés.

J'espĂšre que cela aide quelqu'un. :+1:

Quoi qu'il en soit pour éviter le déclenchement des fonctions firestore lors de l'import d'une base de données existante ?

@bkuri merci pour ce script, je suppose qu'il se passe quelque chose d'étrange avec ma configuration/installation car je ne parviens toujours pas à obtenir des données à afficher dans la console de l'émulateur firestore.

GrĂące Ă  @gugahoi, j'ai pu importer une collection de la production dans l'Ă©mulateur local.
Pour ce faire, j'ai effectué les étapes suivantes :

  1. Accédez à mon chemin de projet Firebase local.
  2. Démarrez les émulateurs en utilisant : firebase emulators:start
  3. Créez manuellement des données de maquette à l'aide de l'interface graphique à l' adresse http://localhost :4000/firestore à l'aide des boutons fournis : _+ Démarrer la collection_ et _+ Ajouter un document_.
  4. Exportez ces données localement en utilisant : emulators:export ./mydirectory
  5. À propos des donnĂ©es du projet situĂ©es dans _Firebase Database / Cloud Firestore_, j'ai exportĂ© une seule collection comme celle-ci : gcloud firestore export gs://my-project-bucket-id.appspot.com --collection-ids=myCollection L'export est maintenant situĂ© sous _Firebase Storage_ dans un dossier avec un horodatage comme nom (je n'ai pas utilisĂ© de prĂ©fixe pour mon test)
  6. Téléchargez ce dossier sur le lecteur local avec : gsutil cp -r gs://my-project-bucket-id.appspot.com/myCollection ./production_data_export REMARQUE : j'ai fait cela dans un environnement Windows... _gsutil_ renverra cette erreur : _"OSError : Le nom de fichier, le nom de répertoire ou la syntaxe du nom de volume est incorrect"_ si le dossier a des caractÚres invalides pour un nom de dossier dans Windows (c'est-à-dire des deux-points) ou cette erreur : _"OSError: Invalid argument.9.0 B]"_ si un fichier interne dans le dossier a aussi des caractÚres invalides. Pour pouvoir télécharger l'export localement, renommez-les avec un nom Windows valide (c'est-à-dire en supprimant les deux points) comme ceci : gsutil mv gs://my-project-bucket-id.appspot.com/2020-05-22T02:01:06_86152 gs://my-project-bucket-id.appspot.com/myCollection
  7. Une fois tĂ©lĂ©chargĂ©, imitez la structure d'exportation locale en renommant le dossier en firestore_export et en copiant le fichier firebase-export-metadata.json Ă  partir du dossier d'exportation local. Juste pour ĂȘtre visuel, voici la structure que j'ai :
$ tree .
.
├── local_data_export
│   ├── firebase-export-metadata.json
│   └── firestore_export
│       ├── all_namespaces
│       │   └── all_kinds
│       │       ├── all_namespaces_all_kinds.export_metadata
│       │       └── output-0
│       └── firestore_export.overall_export_metadata
└── production_data_export
    ├── firebase-export-metadata.json
    └── firestore_export
        ├── all_namespaces
        │   └── kind_myCollection
        │       ├── all_namespaces_kind_myCollection.export_metadata
        │       ├── output-0
        │       └── output-1
        └── firestore_export.overall_export_metadata

8 directories, 9 files
  1. Enfin, lancez l'émulateur local en pointant sur ces données de production à importer : firebase emulators:start --import=./mock_up_data/production_data_export/
  2. Vous devriez voir les données importées sur : http://localhost :4000/firestore/

Je souhaite que ces instructions soient suffisamment claires pour ĂȘtre utiles. J'espĂšre que cela aidera quelqu'un en attendant une solution plus robuste de la part des gens de Firebase.

Juste une brĂšve mise Ă  jour : lorsque j'ai postĂ© les instructions du commentaire ci-dessus, je le faisais dans WSL2 et elles ne semblaient pas fonctionner, mais les mĂȘmes Ă©tapes dans Ubuntu semblent bien fonctionner. Je soupçonne qu'il pourrait y avoir quelque chose dans WSL2 interfĂ©rant .

Je veux faire cela dans l'autre sens je veux importer mes données d'émulateur en production, je dois ajouter 7000 lignes de feuille google à mon firestore et j'ai pu le faire en modifiant une fonction mais en essayant de le faire en production mon la limite de mémoire est également dépassée lorsque quelque chose ne va pas dans la fonction, je pourrais me retrouver avec des données en double. J'ai remarqué l'importation d'exportation et j'ai remarqué que je pouvais exporter les données de mon firestore d'émulateur local. Mais que diriez-vous d'importer ma sauvegarde locale en production ?

@nvanhoesel les formats d'import/export sont les mĂȘmes en production et dans les Ă©mulateurs. Mais le vĂŽtre est un cas d'utilisation rare, vous devrez donc travailler vous-mĂȘme pour exporter l'Ă©mulateur dans Google Cloud Storage afin que Firestore puisse l'importer correctement.

Cette page vous a été utile?
0 / 5 - 0 notes