Firebase-tools: Firestore and Database Emulator: تهيئة مثيل باستخدام مجموعة بيانات

تم إنشاؤها على ١٢ مارس ٢٠١٩  ·  39تعليقات  ·  مصدر: firebase/firebase-tools

سيكون من الرائع أن يكون لديك إمكانية إنشاء مثيل لمحاكي Firestore باستخدام مجموعة بيانات.

حاليًا ، نقوم بكتابة دفعة لتهيئة أو إعادة تعيين مثيل أحد المحاكي. المشكلة هي أن الأمر يستغرق ما يقرب من 3 ثوان لتحديث 120 عملية (مجموعة بيانات الاختبار الخاصة بنا).

هل من الممكن إنشاء مثيل لمحاكي Firestore من لقطة أو لتحسين أداء المحاكي للتحديثات الكبيرة؟

emulator-suite database firestore feature request

التعليق الأكثر فائدة

يجب أن تكون القدرة على استيراد البيانات إلى محاكي Firestore (على سبيل المثال ، تهيئتها ببيانات "البذور") مع الإصدار التالي. سيكون يدويًا في البداية ، وسنضيف أدوات أفضل في الإصدارات اللاحقة.

النظر في ما سيكون ضروريًا لمحاكي Realtime Database.

ال 39 كومينتر

أوافق على أنه سيكون من الرائع تحميل "لقطة" لقاعدة البيانات عند التهيئة. أقوم حاليًا بتشغيل محاكيات Firestore والوظائف محليًا من أجل التطوير ، ولكن عندما أقوم بتزويد قاعدة البيانات ببيانات الاختبار ، يتم تنفيذ مجموعة من مشغلات وظيفة firestore. هذا أمر غير مرغوب فيه إلى حد كبير ، فهل هناك أي خطط لميزة للمساعدة في تحميل البيانات الأولية أو ، أفضل من ذلك ، استمرار تخزين البيانات على القرص؟

نشكرك على إثارة النقطة حول الرغبة في نشر البيانات بدون وظائف
اطلاق النار. كإجراء مؤقت يمكننا بالتأكيد تنفيذ طريقة "للانعطاف"
off "بمكالمة خاصة أثناء تحميل البيانات
يمكن أن يكون مفيدًا لاختبارات معينة أيضًا. هل ستستخدم ذلك؟

لكن على المدى الطويل نحتاج إلى الاستيراد / التصدير.

في السبت ، 12 أكتوبر ، 2019 ، 11:54 صباحًا كتب Wyatt Ades [email protected] :

أوافق على أنه سيكون من الرائع تحميل "لقطة" لقاعدة البيانات على
التهيئة. أقوم حاليًا بتشغيل متجر النار ومحاكيات الوظائف
محليًا من أجل التنمية ، ولكن عندما أقوم بزرع قاعدة البيانات مع بيانات الاختبار ، هناك مجموعة
من مشغلات وظيفة firestore يتم تنفيذها. هذا غير مرغوب فيه جدا ، لذلك
هل هناك أي خطط لميزة للمساعدة في تحميل البيانات الأولية ، أو
حتى أفضل ، فايرستور البيانات استمرار إلى القرص؟

-
أنت تتلقى هذا لأنك مشترك في هذا الموضوع.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/firebase/firebase-tools/issues/1167؟email_source=notifications&email_token=ACATB2VEE7BBI75HECFTE23QOIMOLA5CNFSM4G5NG5X2YY3PNVWWK3TUL52HS4DFVREXG43VMVGB
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/ACATB2WHUTO43JISN54J4U3QOIMOLANCNFSM4G5NG5XQ
.

نعم ، سيكون هذا حلاً جيدًا في الوقت الحالي ، شكرًا!

إذن لا توجد معالم محددة لهذا حتى الآن؟ لكن شيئًا واحدًا أحبه الآن في هذا الفريق هنا ، يبدو أنه أكثر نشاطًا واستجابة.

هل يمكن للرجال إضافة ديسيبل في الوقت الحقيقي أيضًا في النطاق لهذا جنبًا إلى جنب مع فايرستور ديسيبل.

anantanandgupta لا توجد معالم حتى الآن ، ولكن نعم ، نحاول أن نكون منفتحين حقًا بشأن التقدم المحرز! وقد أضفت محاكي قاعدة البيانات ليكون في النطاق أيضًا. بالنسبة إلى قاعدة البيانات ، تكون المشكلة أسهل (تنسيق JSON) ولكننا ما زلنا بحاجة إلى مساعدتك على "إيقاف" وظائف السحابة مؤقتًا

أعلم أنني في أيد أمينة. ولكن لأخبرك بالأهمية ، فقد صممت هذه المنصة الضخمة بالكامل حول قاعدة Firebase وكان الجميع ضد هذا الأمر ، لكن بجهودي أثبتت حتى الآن أن قراري باستخدام firebase باعتبارها التكنولوجيا لم يكن خطأ. في هذه المرحلة ، أصبح الأمر كبيرًا لدرجة أن العمل على ميزات متعددة بواسطة مطورين متعددين باستخدام قاعدة بيانات مشتركة مستضافة على السحابة أصبح أمرًا مستحيلًا. لذلك إذا كان بإمكان كل واحد منا العمل على نسخة محلية من قاعدة البيانات ، فسيكون ذلك أسهل بكثير وفعال.

يجب أن تكون القدرة على استيراد البيانات إلى محاكي Firestore (على سبيل المثال ، تهيئتها ببيانات "البذور") مع الإصدار التالي. سيكون يدويًا في البداية ، وسنضيف أدوات أفضل في الإصدارات اللاحقة.

النظر في ما سيكون ضروريًا لمحاكي Realtime Database.

ryanpbrewster هل توجد أية وثائق حول كيفية إعداد بيانات "البذور"؟

SamyPesse تم تنفيذ هذا داخل Emulator JAR نفسه (كما قال ryanpbrewster ) لكننا لم firebase-tools للقيام بالاستيراد ، لذا فهذا ليس شيئًا يمكنك استخدامه حتى الآن.

هل تمانع في مشاركة كيف تتوقع أن يعمل هذا؟ هل تفضل علامة على الأمر firebase حقل في firebase.json أم شيء آخر؟

يتم تنفيذ استيراد البيانات وتصديرها حاليًا ، لكننا لم نتوصل بعد إلى معرفة كيفية تسهيل استخدام هذه الميزات. لذا ضع في اعتبارك أننا نعلم أن هذه التعليمات تقريبية ، ونحن منفتحون على الأفكار حول كيفية تحسين ذلك:

احصل على تصدير

يمكنك إنشاء تصدير من مثيل Firestore الخاص بالإنتاج ، أو من المحاكي المحلي.

تصدير المحاكي

قم بتشغيل المحاكي واملأه بالبيانات كيفما تشاء. بمجرد حصولك على قاعدة البيانات الخاصة بك في الحالة التي تريدها ، قم بإنشاء تصدير:

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

والذي سيؤدي إلى تفريغ التصدير إلى نظام الملفات المحلي في دليل مثل firestore_export_1576524691/

تصدير الإنتاج

ستحتاج إلى دلو Google Cloud Storage. سأستخدم دلو AppEngine الافتراضي لمشروع الاختبار الخاص بي ryanpbrewster-test.appspot.com . يركض

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

وسيقوم Firestore بتفريغ نسخة كاملة من بيانات الإنتاج في Google Cloud Storage. إذا كنت ترغب في ذلك ، يمكنك استخدام علامة --collection-ids لقصر التصدير على مجموعة محددة من المجموعات.

بمجرد الانتهاء من ذلك ، يمكنك نسخه إلى نظام الملفات المحلي لديك (لاحظ أن هذا الأمر سيحدث بشكل سيء إذا كان لديك قاعدة بيانات ضخمة):

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

بيانات الاستيراد

في الوقت الحالي ، الطريقة الوحيدة لاستيراد البيانات إلى المحاكي هي عبر علامة سطر الأوامر:

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

إذا سارت الأمور على ما يرام ، فسيبدأ المحاكي وسيحتوي على جميع بياناتك فيه.

لاحظ أن المسار الذي يتوقعه هو موقع ملف .overall_export_metadata ، والذي يجب أن يكون في المستوى الأعلى من دليل التصدير.

تمكنت من محاكاة بيانات firestore من التصدير. الآن إذا حاولت بدء بدلة محاكي Firebase. لا يعمل محاكي Firestore لأن المحاكي يعمل بالفعل في المنفذ. لقد حاولت حتى ضبط متغير FIRESTORE_EMULATOR_HOST الذي لا يتعرف عليه. إذا كان من الممكن أيضًا تمرير مسار البذور على طول الأمر أثناء بدء المحاكي ، فسيكون ذلك أكثر فائدة ويقلل الكثير من وقت التطوير مثل firebase emulators:start --firestore_seed_from_export = \path\to\seed\file

+1 لاقتراحprgwar . كيف يمكنني تشغيل مجموعة المحاكي باستخدام متجر بدء التشغيل هذا؟ تستخدم الوظائف في المحاكي الإنتاج لأن "وظائف ⚠: محاكي Cloud Firestore لا يعمل ، لذا ستؤثر المكالمات إلى Firestore على الإنتاج."

prgwar شكرًا على اقتراحك ، نحن نعمل حاليًا على تحديد واجهة برمجة التطبيقات لتحديد الاستيراد / التصدير من الأمر firebase . استخدام jar مباشرة هو مجرد حل بديل وليس شيئًا نتوقع أن يفعله المطورون على المدى الطويل.

@ srolfe26 مشكلتك تبدو مختلفة ، فأنت تقوم بتشغيل محاكي Cloud Functions ولكن ليس محاكي Firestore. حاول تشغيل firebase init emulators لتهيئة محاكي Firestore ثم قم بتشغيل firebase emulators:start مرة أخرى.

بالنسبة إلى أي من مستخدمي WSL (1 أو 2) هناك ، قد تواجه مشكلة في الاتصال بالمحاكي من متصفحك. لقد أضفت علامة --host 0.0.0.0 إلى الأمر أعلاه وقد أدى ذلك إلى حل المشكلة.

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

هلprgwar الصورة اقتراح استخدام --firestore_seed_from_export =تكون مقبولة؟

إذا كان الأمر كذلك ، فأنا على استعداد لطرح العلاقات العامة. وإلا كيف يمكنني المساعدة في تحريك الكرة؟

أود أيضًا أن يتم تنفيذ نفس وظيفة seed_from_export على محاكي Realtime Database.

spencerwhyte شكرا على العرض! أنا أعالج هذا الأمر بفاعلية الآن ، وأعمل على شيء من شأنه أن يدعم Firestore و RTDB وأيضًا أي محاكيات مستقبلية.

ما هو شعورك حيال هذا التدفق العام:

  • "النسخ الاحتياطي" هو مجلد يحتوي على:

    • مجموعة من النسخ الاحتياطية للمحاكي الفردي بتنسيقاتها الأساسية

    • ملف واحد metadata.json يصفهم

  • لبدء المحاكيات ببذرة ، عليك القيام بما يلي: firebase emulators:start --import="./folder-with-backup"
  • لأخذ نسخة احتياطية من المحاكيات قيد التشغيل ، تفتح محطة طرفية جديدة أثناء تشغيلها وتقوم بعمل firebase emulators:export

هذا ما أعمل عليه حاليًا ، وأعتقد أنه أكثر الأشياء مرونة ولكني منفتح جدًا على التعليقات

samtstern إنه لشيء رائع أن نسمع!

يبدو هذا التصميم مثاليًا ، طالما أن تنسيق التصدير / النسخ الاحتياطي للمحاكي هو شيء يمكننا العمل معه. إذا كان نفس تنسيق النسخ الاحتياطية على الإنتاج ، فسيكون ذلك مناسبًا. نحن بحاجة إلى استيراد كمية كبيرة من البيانات لاختبارات التكامل الخاصة بنا دون إطلاق مشغلاتنا. لقد نجحنا حاليًا في البقاء على قيد الحياة من خلال إجراء بعض الفحوصات التي تعطل المشغلات عند الاختبار ، لكننا نود تجنب هذا التعقيد. سيسمح لنا هذا الدعم لـ --import بتبسيط الأمور.

نستخدم firebase emulators:exec لاختباراتنا ، وطالما أنه سيعمل مع exec أيضًا ، سنكون سعداء.

تضمين التغريدة

1) نعم ، سنلتزم بالتأكيد بنفس تنسيقات الإنتاج كلما أمكن ذلك. لذلك بالنسبة لـ Firestore ، سندعم تنسيق الاستيراد / التصدير وبالنسبة لـ RTDB سيكون مجرد ملف عملاق json .
2) نعم ، سندعم emulators:exec --import

شكرا على ملاحظاتك!

يطبق PR # 1968 هذه الميزة (لـ Firestore في الوقت الحالي فقط ، وستتوفر قاعدة بيانات Realtime قريبًا) وسيتم تضمينها في إصدار CLI التالي (على الأرجح 7.14.0 )

تم إصدار هذه الميزة للتو في 7.14.0 ... جربها وأخبرنا برأيك! في الوقت الحالي ، إنه Firestore فقط ولكن Realtime Database هو التالي.

هل هذا موثق في أي مكان؟ أيضًا ، هل هناك طريقة لتصدير بيانات الإنتاج بدون حاوية Google Cloud Storage (التي لا أملكها)؟
صعوبة اختبار المشغلات محليًا بدون نسخ البيانات من مخزن البيانات السحابي.

shaimo آسف ، لقد

للتصدير من الإنتاج ، تحتاج إلى حاوية التخزين السحابي. هذا لأن التصدير عملية "مُدارة" مما يعني أنها تحدث على خادم Google في مكان ما. لا يمكننا تشغيل عملية كهذه على نظام الملفات المحلي الخاص بك ، فنحن بحاجة إلى وجهة سحابية.

إذا كان لديك مشروع Firebase ، فلديك بالفعل حاوية تخزين سحابية افتراضية يمكنك استخدامها وتتضمن بعض الحصة المجانية. ما عليك سوى الانتقال إلى قسم التخزين في وحدة تحكم Firebase للتحقق من ذلك.

samtstern نظرًا لأن التوثيق قد يستغرق بعض الوقت ، هل يمكنك تقديم موجز عن كيفية الاستيراد / التصدير إلى مثيل المحاكي؟

لدينا الآن بعض الوثائق حول الأعلام الجديدة هنا:
https://firebase.google.com/docs/emulator-suite/install_and_configure#startup

لكن دعني أعطيك مثالاً على أي حال. لاستخدام الاستيراد / التصدير ، ستحتاج إلى نافذتين طرفية ، لذا دعنا نسميها Terminal 1 و Terminal 2

ابدأ المحاكيات أولاً

مبنى 1

$ firebase emulators:start
# ...

بعد تكوين بعض البيانات التي ترغب في حفظها فيها ، قم بتشغيل أمر التصدير في محطة أخرى:

مخرج 2

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

الآن لديك تصدير في ./mydirectory . في المرة التالية التي تبدأ فيها برامج المحاكاة ، اطلب منهم الاستيراد من هناك:

مبنى 1

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

وهذا كل شيء!

samtstern هل يمكننا الاستيراد من تصدير إنتاج باستخدام محاكيات Firebase
أرى أن المحاكيات: start --import تبحث عن firebase-export-metadata.json لكن لدي firestore-export / firestore-export.overall_export_metadata

landonj يمكنك ذلك ولكن الأمر صعب بعض الشيء في الوقت الحالي. أبسط ما يمكنك فعله هو تشغيل emulators:export مرة واحدة ثم تعديل ملفات JSON للإشارة إلى تصدير الإنتاج بدلاً من التصدير المحلي.

أي شيء عن البذر RTDB للمحاكي حتى الآن؟

FergyKay لا شيء حتى الآن ولكن يمكنك المتابعة على طول هنا:
https://github.com/firebase/firebase-tools/issues/2079

هذا مطلوب بشدة

أحاول أن أفعل نفس الشيء تمامًا مثل landonj ..

وحاولت ما قال samtstern ... لكنني أتلقى خطأ ...

ما أفعله خطأ؟

bdw .. الملف موجود!

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: فشل تحليل ملف بيانات تعريف التصدير الإجمالي
على com.google.cloud.datastore.emulator.impl.ExportImportUtil.parseOverallMetadataFile (ExportImportUtil.java:225)
على com.google.cloud.datastore.emulator.impl.ExportImportUtil.fetchEntities (ExportImportUtil.java:54)
في com.google.cloud.datastore.emulator.firestore.CloudFirestore.main (CloudFirestore.java:89)
{"metadata": {"emulator": {"name": "firestore"}، "message": "com.google.cloud.datastore.core.exception.DatastoreException: فشل تحليل ملف بيانات تعريف التصدير الإجمالي \ 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] سببها: 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 (لا يوجد مثل هذا الملف أو الدليل)
{"البيانات الوصفية": {"المحاكي": {"الاسم": "firestore"} ، "الرسالة": "سببها: 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 (لا يوجد مثل هذا الملف أو الدليل) \ n "}}
[2020-05-31T13: 31: 23.603Z] في java.base / java.io.FileInputStream.open0 (الطريقة الأصلية)
في java.base / java.io.FileInputStream.open (FileInputStream.java:213)
على java.base / java.io.FileInputStream.(FileInputStream.java:155)
على com.google.cloud.datastore.emulator.impl.ExportImportUtil.parseOverallMetadataFile (ExportImportUtil.java:215)
... 2 أكثر
{"البيانات الوصفية": {"المحاكي": {"الاسم": "firestore"}، "message": "\ tat java.base / java.io.FileInputStream.open0 (الطريقة الأصلية) \ 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 أخرى \ n "}}

خطأ: firestore: خرج Firestore Emulator برمز: 1

landonj يمكنك ذلك ولكن الأمر صعب بعض الشيء في الوقت الحالي. أبسط ما يمكنك فعله هو تشغيل emulators:export مرة واحدة ثم تعديل ملفات JSON للإشارة إلى تصدير الإنتاج بدلاً من التصدير المحلي.

هل تستطيع أن توسع في ذلك؟ هل يمكنني الإشارة مباشرة إلى دلو gcloud؟ أم يجب علي أولاً تنزيل محتويات التصدير محليًا؟ ما هي الملفات التي أحتاج إلى تعديلها؟

ما يلي هو ما حاولت:

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

نظرًا لأن ما سبق لا يبدو أنه يعمل ، فقد قمت بتحديث ملف firebase-exports-metadata.json بالمحتويات التالية:

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

يوجد أدناه هيكل الدليل:

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

ومع ذلك ، ما زلت لا أملك بيانات في واجهة المستخدم المحاكي.

يحرر

فقط اعتقدت أنني سأضيف الإخراج النهائي من المحاكي ، يتم تشغيله بدون أخطاء ولكن بدون بياناتي:

> 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 رسالتك ساعدتني في التوصل إلى حل: https://gist.github.com/bkuri/36cef71bcf30a5416b1c353cb81f38ed

إنه نص برمجي صغير يعمل على زرع مثيل محاكي التخزين السحابي. كل ما تحتاجه هو اسم المشروع ومسار الوجهة لحفظ البيانات المصدرة إليه. على سبيل المثال: ./seed-storage.sh my-project /tmp/export .

راجع للشغل ، يعتمد النص أعلاه على أداتين شائعتين جدًا ( lsof و screen ) بالإضافة إلى المشتبه بهم المعتادون ( firebase ، gcloud و gsutil ) ، لذا تأكد من تثبيتها.

أمل أن هذا يساعد شخصاما. : +1:

على أي حال لتجنب تشغيل وظائف firestore عند استيراد قاعدة بيانات موجودة؟

bkuri شكرًا على هذا البرنامج النصي ، أعتقد أن هناك شيئًا غريبًا يحدث في الإعداد / التثبيت الخاص بي لأنني ما زلت غير قادر على الحصول على أي بيانات لتظهر في وحدة تحكم محاكي firestore.

بفضل gugahoi تمكنت من استيراد مجموعة من الإنتاج إلى المحاكي المحلي.
للقيام بذلك قمت بالخطوات التالية:

  1. انتقل إلى مسار مشروع Firebase المحلي.
  2. ابدأ المحاكيات باستخدام: firebase emulators:start
  3. قم بإنشاء بعض بيانات نموذج بالحجم الطبيعي يدويًا باستخدام واجهة المستخدم الرسومية على http: // localhost : 4000 / firestore باستخدام الأزرار المتوفرة: _ + بدء المجموعة _ و _ + إضافة مستند_.
  4. قم بتصدير هذه البيانات محليًا باستخدام: emulators:export ./mydirectory
  5. حول بيانات المشروع الموجودة في _Firebase Database / Cloud Firestore_ ، قمت بتصدير مجموعة واحدة مثل هذا: gcloud firestore export gs://my-project-bucket-id.appspot.com --collection-ids=myCollection يقع التصدير الآن ضمن _Firebase Storage_ في مجلد بطابع زمني كاسم (لم أستخدم بادئة لاختباري)
  6. قم بتنزيل هذا المجلد على محرك أقراص محلي باستخدام: gsutil cp -r gs://my-project-bucket-id.appspot.com/myCollection ./production_data_export ملاحظة: لقد فعلت ذلك في بيئة Windows ... _gsutil_ سيظهر هذا الخطأ: _ "خطأ OS: اسم الملف أو اسم الدليل أو بناء جملة تسمية وحدة التخزين غير صحيح" _ إذا كان المجلد يحتوي على أحرف غير صالحة لاسم المجلد في Windows (مثل النقطتين) أو هذا الخطأ: _ "خطأ OSE: وسيطة غير صالحة.9.0 B]" _ إذا كان الملف الداخلي في المجلد يحتوي على أحرف غير صالحة أيضًا. لتتمكن من تنزيل التصدير محليًا ، أعد تسميتها باسم Windows صالح (أي إزالة النقطتين) على النحو التالي: gsutil mv gs://my-project-bucket-id.appspot.com/2020-05-22T02:01:06_86152 gs://my-project-bucket-id.appspot.com/myCollection
  7. بمجرد التنزيل ، قم بتقليد بنية التصدير المحلية مع إعادة تسمية المجلد إلى firestore_export ونسخ ملف firebase-export-metadata.json من مجلد التصدير المحلي. فقط لأكون مرئيًا ، هذا هو الهيكل الذي حصلت عليه:
$ 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. أخيرًا ، ابدأ المحاكي المحلي بالإشارة إلى بيانات الإنتاج هذه ليتم استيرادها: firebase emulators:start --import=./mock_up_data/production_data_export/
  2. يجب أن تشاهد البيانات المستوردة على: http: // localhost : 4000 / firestore /

أتمنى أن تكون هذه التعليمات واضحة بما يكفي لتكون مفيدة. آمل أن يساعد هذا شخصًا ما بينما ننتظر حلاً أكثر قوة من مستخدمي Firebase.

فقط كتحديث موجز: عندما نشرت التعليمات الواردة في التعليق أعلاه ، كنت أفعل ذلك في WSL2 ولا يبدو أنها تعمل ولكن نفس الخطوات في Ubuntu تبدو جيدة ، وأظن أنه قد يكون هناك شيء ما في WSL2 يتدخل .

أريد أن أفعل ذلك بالعكس ، فأنا أرغب في استيراد بيانات المحاكي الخاصة بي إلى الإنتاج ، فأنا بحاجة إلى إضافة 7000 صف من صفائح Google إلى متجر firestore الخاص بي وتمكنت من القيام بذلك عن طريق تحرير وظيفة ولكن عند محاولة القيام بذلك في الإنتاج الخاص بي يتم تجاوز حد الذاكرة أيضًا عندما يحدث خطأ ما داخل الوظيفة قد ينتهي بي الأمر ببيانات مكررة. لقد لاحظت استيراد التصدير ولاحظت أنه يمكنني إجراء تصدير لبيانات متجر firestore الخاص بالمحاكي المحلي. ولكن ماذا عن استيراد النسخة الاحتياطية المحلية الخاصة بي إلى الإنتاج؟

nvanhoesel ، تكون تنسيقات الاستيراد / التصدير هي نفسها في الإنتاج وفي المحاكيات. لكن حالتك هي حالة استخدام غير شائعة ، لذا ستحتاج إلى القيام ببعض الأعمال بنفسك لتصدير المحاكي إلى Google Cloud Storage حتى يتمكن Firestore من استيراده بشكل صحيح.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات