Firebase-tools: Firestore dan Database Emulator: Inisialisasi instance dengan kumpulan data

Dibuat pada 12 Mar 2019  Β·  39Komentar  Β·  Sumber: firebase/firebase-tools

Akan sangat bagus jika memiliki kemungkinan untuk membuat instance emulator Firestore dengan kumpulan data.

Saat ini, kami sedang melakukan penulisan batch untuk menginisialisasi atau menyetel ulang instance emulator. Masalahnya adalah diperlukan waktu hampir 3 detik untuk memperbarui 120 operasi (set data pengujian kami).

Apakah mungkin untuk membuat instance emulator Firestore dari snapshot atau untuk meningkatkan kinerja emulator untuk pembaruan besar?

emulator-suite database firestore feature request

Komentar yang paling membantu

Kemampuan untuk mengimpor data ke emulator Firestore (yaitu, menginisialisasinya dengan data "seed") harus dikeluarkan dengan rilis berikutnya. Ini akan menjadi sedikit manual pada awalnya, kami akan menambahkan perkakas yang lebih baik di rilis berikutnya.

Melihat apa yang diperlukan untuk emulator Realtime Database.

Semua 39 komentar

Saya setuju bahwa akan sangat bagus untuk memuat "snapshot" database pada inisialisasi. Saat ini saya menjalankan emulator firestore dan fungsi secara lokal untuk pengembangan, tetapi ketika saya menyemai DB dengan data pengujian, sekelompok pemicu fungsi firestore dijalankan. Ini sangat tidak diinginkan, jadi apakah ada rencana untuk fitur yang membantu memuat data awal atau, lebih baik lagi, persistensi data firestore ke disk?

Terima kasih telah mengemukakan pendapat tentang keinginan untuk menyemai data tanpa fungsi
penembakan. Sebagai tindakan sementara, kita pasti bisa menerapkan cara untuk "berbalik"
off" dipicu dengan panggilan khusus saat Anda memuat data
bisa berguna untuk tes tertentu juga. Apakah Anda akan menggunakan itu?

Tapi untuk jangka panjang kita perlu impor/ekspor.

Pada Sabtu, 12 Oktober 2019, 11:54 Wyatt Ades [email protected] menulis:

Saya setuju bahwa akan sangat bagus untuk memuat "snapshot" database di
inisialisasi. Saat ini saya menjalankan emulator firestore dan fungsi
lokal untuk pengembangan, tetapi ketika saya menyemai DB dengan data pengujian, banyak
dari pemicu fungsi firestore dieksekusi. Ini sangat tidak diinginkan, jadi
apakah ada rencana fitur untuk membantu memuat data awal atau,
lebih baik lagi, persistensi data firestore ke disk?

β€”
Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/firebase/firebase-tools/issues/1167?email_source=notifications&email_token=ACATB2VEE7BBI75HECFTE23QOIMOLA5CNFSM4G5NG5X2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTLOment-
atau berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/ACATB2WHUTO43JISN54J4U3QOIMOLANCNFSM4G5NG5XQ
.

Ya itu akan menjadi solusi yang baik untuk saat ini, terima kasih!

Jadi belum ada tonggak yang ditetapkan untuk ini? tapi satu hal yang saya suka sekarang tentang tim ini di sini, tampaknya lebih aktif dan responsif.

dapatkah teman-teman menambahkan db realtime juga dalam ruang lingkup ini bersama dengan firestore db.

@anantanandgupta belum ada pencapaian, tapi ya kami mencoba untuk benar-benar terbuka tentang kemajuan! Dan saya telah menambahkan emulator Database untuk berada dalam cakupan juga. Untuk Database masalahnya lebih mudah (format JSON) tetapi kami masih perlu membantu Anda "menjeda" Cloud Functions

Saya tahu saya berada di tangan yang baik. Tetapi untuk memberi tahu Anda pentingnya, saya telah merancang platform besar ini sepenuhnya di sekitar firebase dan semua orang menentang ini, tetapi dengan upaya saya, saya telah membuktikan sampai sekarang bahwa keputusan saya untuk menggunakan firebase sebagai teknologinya tidak salah. Pada titik ini telah menjadi sangat besar sehingga untuk mengerjakan banyak fitur oleh banyak pengembang dengan basis data umum yang dihosting di cloud menjadi tidak mungkin. Jadi jika masing-masing dari kita dapat mengerjakan salinan database lokal, itu akan jauh lebih mudah dan efisien.

Kemampuan untuk mengimpor data ke emulator Firestore (yaitu, menginisialisasinya dengan data "seed") harus dikeluarkan dengan rilis berikutnya. Ini akan menjadi sedikit manual pada awalnya, kami akan menambahkan perkakas yang lebih baik di rilis berikutnya.

Melihat apa yang diperlukan untuk emulator Realtime Database.

@ryanpbrewster apakah ada dokumentasi tentang cara mengatur data "seed"?

@SamyPesse ini telah diimplementasikan di dalam JAR Emulator itu sendiri (seperti yang dikatakan @ryanpbrewster ) tetapi kami belum benar-benar mengekspos API melalui firebase-tools untuk melakukan impor jadi ini belum benar-benar sesuatu yang dapat Anda gunakan.

Maukah Anda berbagi bagaimana Anda mengharapkan ini bekerja? Apakah Anda lebih suka bendera pada perintah firebase , bidang di firebase.json atau yang lainnya?

Mengimpor dan mengekspor data saat ini diterapkan, tetapi kami belum menemukan cara untuk memudahkan penggunaan fitur ini. Jadi ingatlah bahwa kami tahu petunjuk ini kasar, dan kami terbuka untuk ide tentang cara meningkatkan ini:

Dapatkan ekspor

Anda dapat menghasilkan ekspor dari instance Firestore produksi Anda, atau dari emulator lokal.

Ekspor emulator

Boot emulator dan isi dengan data sesuka Anda. Setelah database Anda dalam keadaan yang Anda suka, buat ekspor:

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

yang akan membuang ekspor ke sistem file lokal Anda di direktori seperti firestore_export_1576524691/

Ekspor produksi

Anda memerlukan keranjang Google Cloud Storage. Saya akan menggunakan ember AppEngine default proyek pengujian saya ryanpbrewster-test.appspot.com . Lari

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

dan Firestore akan membuang salinan lengkap data produksi Anda ke Google Cloud Storage. Jika mau, Anda dapat menggunakan tanda --collection-ids untuk membatasi ekspor ke kumpulan koleksi tertentu.

Setelah selesai, Anda dapat menyalinnya ke sistem file lokal Anda (perhatikan bahwa ini akan berjalan buruk jika Anda memiliki database yang besar):

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

Impor data

Untuk saat ini, satu-satunya cara untuk mengimpor data ke emulator adalah melalui flag baris perintah:

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

Jika semuanya berjalan dengan baik, emulator akan memulai dan memiliki semua data Anda di dalamnya.

Perhatikan bahwa jalur yang diharapkan adalah lokasi file .overall_export_metadata , yang seharusnya berada di tingkat atas direktori ekspor.

Saya dapat meniru data firestore dari ekspor. Sekarang Jika saya mencoba memulai setelan emulator firebase. Emulator Firestore tidak berfungsi karena emulator sudah berjalan di port. Saya bahkan mencoba mengatur variabel FIRESTORE_EMULATOR_HOST yang tidak dikenali. Jika jalur benih juga dapat diteruskan di sepanjang perintah saat memulai emulator, itu akan jauh lebih membantu dan mengurangi banyak waktu pengembangan seperti firebase emulators:start --firestore_seed_from_export = \path\to\seed\file

+1 untuk saran @prgwar . Bagaimana saya bisa menjalankan emulator suite menggunakan firestore startup ini? Fungsi di emulator menggunakan produksi karena "⚠ fungsi: Emulator Cloud Firestore tidak berjalan, jadi panggilan ke Firestore akan memengaruhi produksi."

@prgwar terima kasih atas saran Anda, kami sedang bekerja untuk memutuskan API untuk menentukan impor/ekspor dari perintah firebase . Menggunakan jar secara langsung hanyalah solusi dan bukan sesuatu yang kami harapkan dilakukan pengembang dalam jangka panjang.

@ srolfe26 masalah Anda terdengar seperti masalah yang berbeda, Anda menjalankan emulator Cloud Functions tetapi bukan emulator Firestore. Coba jalankan firebase init emulators untuk menginisialisasi emulator Firestore dan kemudian jalankan firebase emulators:start lagi.

Untuk sesama pengguna WSL (1 atau 2) di luar sana, Anda mungkin mengalami masalah saat menyambung ke emulator dari browser Anda. Saya menambahkan flag --host 0.0.0.0 ke perintah di atas dan itu memperbaiki masalah.

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

Akan @prgwar 's saran menggunakan --firestore_seed_from_export =dapat diterima?

Jika demikian, saya bersedia untuk memasang PR. Bagaimana lagi saya bisa membantu membuat bola bergulir?

Saya juga akan senang jika fungsi seed_from_export yang sama dapat diimplementasikan pada emulator Realtime Database.

@spencerwhyte terima kasih atas tawarannya! Saya secara aktif menangani ini sekarang, mengerjakan sesuatu yang akan mendukung Firestore dan RTDB dan juga emulator masa depan.

Bagaimana perasaan Anda tentang aliran umum ini:

  • "Cadangan" adalah folder yang berisi:

    • Sekelompok cadangan emulator individu dalam format kanoniknya

    • Satu file metadata.json yang menjelaskannya

  • Untuk memulai emulator dengan seed yang Anda lakukan: firebase emulators:start --import="./folder-with-backup"
  • Untuk mengambil cadangan emulator yang sedang berjalan, buka terminal baru saat sedang berjalan dan lakukan firebase emulators:export

Itu yang sedang saya kerjakan, menurut saya itu yang paling fleksibel tapi saya sangat terbuka untuk feedback

@samtstern Senang mendengarnya!

Desain ini terdengar sempurna, selama format ekspor emulator / format cadangan adalah sesuatu yang dapat kita kerjakan. Jika formatnya sama dengan cadangan pada produksi, itu akan berhasil. Kami memiliki kebutuhan untuk mengimpor sejumlah besar data untuk pengujian integrasi kami tanpa memicu pemicu kami. Saat ini kami telah bertahan dengan melakukan beberapa pemeriksaan yang menonaktifkan pemicu saat diuji, namun kami ingin menghindari kerumitan itu. Dukungan untuk --import akan memungkinkan kita untuk menyederhanakan banyak hal.

Kami menggunakan firebase emulators:exec untuk pengujian kami, jadi selama itu akan bekerja dengan exec juga, kami akan senang.

@spencerwhyte

1) Ya, kami pasti akan tetap menggunakan format yang sama dengan produksi bila memungkinkan. Jadi untuk Firestore kami akan mendukung format impor/ekspor dan untuk RTDB itu hanya akan menjadi file json raksasa.
2) Ya, kami akan mendukung emulators:exec --import

Terima kasih untuk umpan baliknya!

PR #1968 mengimplementasikan fitur ini (hanya untuk Firestore saat ini, Realtime Database segera hadir) dan akan disertakan dalam rilis CLI berikutnya (kemungkinan 7.14.0 )

Fitur ini baru saja dirilis pada 7.14.0 ... cobalah dan beri tahu kami pendapat Anda! Saat ini hanya Firestore tetapi Realtime Database berikutnya.

Apakah ini didokumentasikan di mana saja? Juga, apakah ada cara untuk mengekspor data produksi tanpa keranjang Google Cloud Storage (yang tidak saya miliki)?
Mengalami kesulitan memicu pengujian secara lokal tanpa data direplikasi dari penyimpanan data cloud.

@shaimo maaf kami sedikit ketinggalan dalam hal dokumen tetapi mereka akan keluar dalam beberapa hari ke depan!

Untuk mengekspor dari produksi, Anda memerlukan bucket Cloud Storage. Ini karena ekspor adalah operasi "terkelola" yang berarti itu terjadi di server Google di suatu tempat. Kami tidak dapat menjalankan operasi seperti itu terhadap sistem file lokal Anda, kami memerlukan tujuan cloud.

Jika Anda memiliki proyek Firebase, Anda sebenarnya memiliki keranjang Cloud Storage default yang dapat Anda gunakan dan itu mencakup beberapa kuota gratis. Cukup navigasikan ke bagian Penyimpanan konsol Firebase untuk memeriksanya.

@samtstern Karena dokumentasinya mungkin memakan waktu, bisakah Anda memberikan penjelasan singkat tentang cara mengimpor/mengekspor ke instance emulator?

Kami sekarang memiliki beberapa dokumentasi tentang flag baru di sini:
https://firebase.google.com/docs/emulator-suite/install_and_configure#startup

Tapi izinkan saya memberi Anda sebuah contoh. Untuk menggunakan impor/ekspor, Anda memerlukan dua jendela terminal, jadi sebut saja Terminal 1 dan Terminal 2

Pertama mulai emulator

Terminal 1

$ firebase emulators:start
# ...

Setelah Anda membuat beberapa data di dalamnya yang ingin Anda simpan, jalankan perintah ekspor di terminal lain:

Terminal 2

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

Sekarang Anda memiliki ekspor dalam ./mydirectory . Lain kali Anda memulai emulator, beri tahu mereka untuk mengimpor dari sana:

Terminal 1

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

Dan itu saja!

@samtstern Bisakah kita mengimpor dari ekspor produksi menggunakan emulator firebase
Saya melihat bahwa emulator:start --import sedang mencari firebase-export-metadata.json tetapi saya memiliki firestore-export/firestore-export.overall_export_metadata

@landonj Anda bisa tetapi saat ini agak sulit. Hal paling sederhana untuk dilakukan adalah menjalankan emulators:export sekali dan kemudian memodifikasi file JSON untuk menunjuk ke ekspor produksi Anda daripada yang lokal.

Apa saja tentang penyemaian RTDB untuk emulator?

@FergyKay belum ada tetapi Anda dapat mengikuti di sini:
https://github.com/firebase/firebase-tools/issues/2079

Ini sangat dibutuhkan

Saya mencoba melakukan hal yang sama persis dengan @landonj ..

dan saya mencoba apa yang dikatakan @samtstern ... tetapi saya menerima kesalahan ...

Apa yang saya lakukan salah?

bdw.. filenya ada!

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: Gagal mengurai keseluruhan file metadata ekspor
di com.google.cloud.datastore.emulator.impl.ExportImportUtil.parseOverallMetadataFile(ExportImportUtil.java:225)
di com.google.cloud.datastore.emulator.impl.ExportImportUtil.fetchEntities(ExportImportUtil.java:54)
di com.google.cloud.datastore.emulator.firestore.CloudFirestore.main(CloudFirestore.java:89)
{"metadata":{"emulator":{"name":"firestore"},"message":"com.google.cloud.datastore.core.exception.DatastoreException: Gagal mengurai keseluruhan file metadata ekspor\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] Disebabkan oleh: java.io.FileNotFoundException: /Users/ridermansb/Projects/meve.ai/backups/emulator-data/Users/ridermansb/Projects/meve.ai/backups/ 31-05-2020/2020-05-31/2020-05-31T13:19:28_6168.overall_export_metadata (Tidak ada file atau direktori seperti itu)
{"metadata":{"emulator":{"name":"firestore"},"message":"Disebabkan oleh: 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 (Tidak ada file atau direktori seperti itu)\n"}}
[2020-05-31T13:31:23.603Z] di java.base/java.io.FileInputStream.open0(Metode Asli)
di java.base/java.io.FileInputStream.open(FileInputStream.java:213)
di java.base/java.io.FileInputStream.(FileInputStream.java:155)
di com.google.cloud.datastore.emulator.impl.ExportImportUtil.parseOverallMetadataFile(ExportImportUtil.java:215)
... 2 lagi
{"metadata":{"emulator":{"name":"firestore"},"message":"\tat java.base/java.io.FileInputStream.open0(Metode Asli)\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 lagi\n"}}

Kesalahan: firestore: Emulator Firestore telah keluar dengan kode: 1

@landonj Anda bisa tetapi saat ini agak sulit. Hal paling sederhana untuk dilakukan adalah menjalankan emulators:export sekali dan kemudian memodifikasi file JSON untuk menunjuk ke ekspor produksi Anda daripada yang lokal.

Dapatkah Anda memperluas ini? Bisakah saya mengarahkan langsung ke ember gcloud? Atau haruskah saya mengunduh konten ekspor terlebih dahulu secara lokal? File mana yang perlu saya modifikasi?

Berikut ini adalah apa yang saya coba:

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

Karena hal di atas sepertinya tidak berfungsi, saya memperbarui file firebase-exports-metadata.json dengan konten berikut:

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

Di bawah ini adalah struktur direktori:

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

Namun saya masih belum memiliki data di UI emulator.

Sunting

Hanya berpikir saya akan menambahkan hasil akhir dari emulator, itu berjalan tanpa kesalahan tetapi tanpa data saya:

> 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 posting Anda membantu saya menemukan solusi: https://Gist.github.com/bkuri/36cef71bcf30a5416b1c353cb81f38ed

Ini adalah skrip bash kecil yang menyemai instance emulator penyimpanan cloud Anda. Yang dibutuhkan hanyalah nama proyek dan jalur tujuan untuk menyimpan data yang diekspor. yaitu: ./seed-storage.sh my-project /tmp/export .

BTW, skrip di atas tergantung pada dua alat yang sangat umum ( lsof dan screen ) selain tersangka biasa ( firebase , gcloud dan gsutil ), jadi pastikan Anda telah menginstalnya.

Semoga ini bisa membantu seseorang. :+1:

Pokoknya untuk menghindari pemicu fungsi firestore saat mengimpor database yang ada?

@bkuri terima kasih untuk skrip itu, saya kira ada sesuatu yang aneh terjadi dengan pengaturan/instalasi saya karena saya masih tidak dapat menampilkan data apa pun di konsol emulator firestore.

Berkat @gugahoi saya dapat mengimpor koleksi dari produksi ke emulator lokal.
Untuk melakukannya saya melakukan langkah-langkah berikut:

  1. Buka jalur proyek Firebase lokal saya.
  2. Mulai emulator menggunakan: firebase emulators:start
  3. Buat secara manual beberapa data mockup menggunakan GUI di http://localhost :4000/firestore menggunakan tombol yang disediakan: _+ Mulai Koleksi_ dan _+ Tambah Dokumen_.
  4. Ekspor data ini secara lokal menggunakan: emulators:export ./mydirectory
  5. Tentang data proyek yang terletak di _Firebase Database / Cloud Firestore_, saya mengekspor satu koleksi seperti ini: gcloud firestore export gs://my-project-bucket-id.appspot.com --collection-ids=myCollection Ekspor sekarang terletak di bawah _Firebase Storage_ di folder dengan cap waktu sebagai nama (saya tidak menggunakan awalan untuk ujian saya)
  6. Unduh folder ini ke drive lokal dengan: gsutil cp -r gs://my-project-bucket-id.appspot.com/myCollection ./production_data_export CATATAN: Saya melakukan ini di lingkungan Windows... _gsutil_ akan memunculkan kesalahan ini: _"OSError: Nama file, nama direktori, atau sintaks label volume salah"_ jika folder memiliki karakter yang tidak valid untuk nama folder di Windows (yaitu titik dua) atau kesalahan ini: _"OSError: Invalid argument.9.0 B]"_ jika file dalam folder juga memiliki karakter yang tidak valid. Untuk dapat mengunduh ekspor secara lokal, ganti nama ini dengan nama Windows yang valid (yaitu menghapus titik dua) seperti ini: gsutil mv gs://my-project-bucket-id.appspot.com/2020-05-22T02:01:06_86152 gs://my-project-bucket-id.appspot.com/myCollection
  7. Setelah diunduh, tiru struktur ekspor lokal dengan mengganti nama folder menjadi firestore_export dan salin file firebase-export-metadata.json dari folder ekspor lokal. Hanya untuk visual, inilah struktur yang saya dapatkan:
$ 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. Terakhir, mulai emulator lokal yang menunjuk ke data produksi ini untuk diimpor: firebase emulators:start --import=./mock_up_data/production_data_export/
  2. Anda akan melihat data yang diimpor di: http://localhost :4000/firestore/

Saya berharap petunjuk ini cukup jelas untuk membantu. Saya harap ini akan membantu seseorang sementara kami menunggu solusi yang lebih kuat dari orang-orang Firebase.

Sama seperti pembaruan singkat: ketika saya memposting instruksi dari komentar di atas, saya melakukannya di WSL2 dan sepertinya tidak berfungsi tetapi langkah yang sama di Ubuntu tampaknya baik-baik saja. Saya menduga mungkin ada sesuatu di WSL2 yang mengganggu .

Saya ingin melakukan ini sebaliknya saya ingin mengimpor data emulator saya ke dalam produksi, saya perlu menambahkan 7000 baris google sheet ke firestore saya dan saya dapat melakukannya dengan mengedit fungsi namun ketika mencoba melakukannya dalam produksi saya batas memori terlampaui juga ketika ada yang tidak beres di dalam fungsi saya mungkin berakhir dengan data duplikat. Saya perhatikan ekspor impor dan saya perhatikan bahwa saya dapat mengekspor data firestore emulator lokal saya. Tetapi bagaimana dengan mengimpor cadangan lokal saya ke dalam produksi?

@nvanhoesel format impor/ekspor sama dalam produksi dan emulator. Tetapi milik Anda adalah kasus penggunaan yang tidak umum sehingga Anda harus melakukan beberapa pekerjaan sendiri untuk mendapatkan ekspor emulator ke Google Cloud Storage sehingga Firestore dapat mengimpornya dengan benar.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat