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?
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:
Anda dapat menghasilkan ekspor dari instance Firestore produksi Anda, atau dari emulator lokal.
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/
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 .
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 =
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:
metadata.json
yang menjelaskannyafirebase emulators:start --import="./folder-with-backup"
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.
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:
firebase emulators:start
emulators:export ./mydirectory
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)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
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
firebase emulators:start --import=./mock_up_data/production_data_export/
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.
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.