Firebase-tools: لا يمكن قراءة خاصية "النشر" غير المعرفة

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

معلومات البيئة


أدوات Firebase:
[email protected]


منصة:
ماك

حالة اختبار

ماك، عقدة 10.15.3، [email protected]

خطوات التكاثر

قم بإنشاء موقعين للاستضافة على وحدة تحكم Firebase.
يركض
" هدف Firebase
يركض
"نشر Firebase - استضافة فقط: dev "

سلوك متوقع

تم النشر بنجاح

السلوك الفعلي

[info] Project Console: https://console.firebase.google.com/project/project-name/overview
[debug] [2019-05-01T19:12:12.726Z] TypeError: Cannot read property 'deploys' of undefined
    at /Users/reeda/.nvm/versions/node/v10.15.3/lib/node_modules/firebase-tools/lib/deploy/index.js:88:36
    at process._tickCallback (internal/process/next_tick.js:68:7)
[error] 
[error] Error: An unexpected error has occurred.
hosting bug

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

لقد قمت بحل مشكلتي بالتأكد من:

  1. يجب أن يحتوي .firebaserc على targets.<PROJECT_ID>.hosting.<TARGET_NAME> = [ "<HOST_ID" ]
{
  "projects": {
    "default": "my-project-id"
  },
  "targets": {
    "my-project-id": {
      "hosting": {
        "my-blog": [
          "my-blog-host-id"
        ]
      }
    }
  }
}

يمكن إنشاء الجزء targets باستخدام الأمر firebase target:apply hosting my-blog my-blog-host-id

  1. يجب أن يحتوي firebase.json على hosting كمصفوفة ، ويجب أن يحتوي target: <TARGET_NAME>
{
  "hosting": [{
    "target": "my-blog",
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }]
}

الجزء المهم هو جعل مصفوفة hosting ، وإضافة target إلى العنصر الخاص بها.

ال 36 كومينتر

تم إجراء بعض التعديلات في هذا التدفق مؤخرًا. يأتي هذا الخطأ من (في المصدر): https://github.com/firebase/firebase-tools/blob/master/src/deploy/index.js#L111

Memeriaj هل يمكنك إلقاء نظرة كما كنت تتعامل مع هذا مؤخرًا؟

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

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

(غير متعلق بالمشكلة: بشكل عام ، تريد أن يكون تبديل مستوى البيئة لديك على أساس مستوى مشروع Firebase وليس على مواقع استضافة مختلفة ضمن نفس المشروع (على الرغم من أنه قد يكون لديك موقع لمدونة أو موقع لتطبيق ويب ، وموقع لمحرر مستنداتك وجميعها في نفس البيئة على مواقع استضافة مختلفة في نفس المشروع). ويرجع ذلك أساسًا إلى أن أشياء مثل Firebase Auth لها مثيل واحد فقط داخل المشروع. من الناحية المثالية ، يكون ملف firebase.json هو الإعداد بطريقة تجعلك قادرًا على شيء مثل firebase use dev ، firebase deploy ، تحقق من المطورين للتأكد من أن الأشياء تعمل ، firebase use staging ، firebase deploy ، ...)

{ "firestore": { "rules": "firestore.rules", "indexes": "firestore.indexes.json" }, "hosting": { "public": "build", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "rewrites": [ { "source": "**", "destination": "/index.html" } ] }, "functions": { "predeploy": [ "npm --prefix \"$RESOURCE_DIR\" run lint" ] } }

أعتقد أن التكوين الذي ذكرته موجود في ملف firebase bashrc وليس ملف firebase json.

ضمن قسم الاستضافة في ملف firebase.json ، يجب أن يكون لديك "target": "dev" لكي يعمل firebase deploy --only hosting:dev . تعمل علامة --only كمرشح وبدون الحقل target في تكوين الاستضافة ، فإن CLI لا تنشر أي شيء (والذي يجب أن يكون خطأ برسالة مفيدة ، ولكن الآن يقبل بشكل أعمى ذلك).

عذرًا ، ليس من الواضح مكان وضع الحقل الهدف في json ، هل سأضع هذا في جذر json (لم يعمل) أم يجب أن يكون في جذر الاستضافة (لم يعمل أيضًا معي)

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

يجب أن ينتقل إلى قسم الاستضافة في ملف firebase.json الخاص بك حتى يبدو مثل:

{
// ...
  "hosting": [{ // Can be an array and have multiple configs, or an object if you've only got a single config
    "target": "blog",
    "public": "build/blog"
    // ...
  }],
// ...
}

تتناول صفحة المستندات هذه مزيدًا من التفاصيل حول كل خطوة وتتحدث قليلاً عن سبب استخدامك لأهداف ومواقع متعددة أيضًا.

مع firebase target:apply hosting dev firebase-hosting-id ثم firebase-hosting-id يجب أن يكون اسم الموقع الذي تخطط للنشر إليه. يؤدي هذا إلى تعيين الهدف على المشروع الذي تعمل عليه حاليًا في CLI ، وهو من الأمر firebase use . لكن ربما أساء فهم ما تحاول تحقيقه.

شكرًا ، يبدو أنني أحقق بعض التقدم ولكني الآن أحصل على كيان خطأ 404 غير موجود.
لذا لنفترض أن مشروعي في Firebase هو reedy-1 وهدفي هو reedy-1-api
عندما أقوم بإضافة هدفي في الاستضافة كـ reedy-1-api ، عندما أحاول نشره ، فإنه يشكو من عدم العثور على الكيان.
أستطيع أن أرى في ملف firebaserc الخاص بي ، تحت الأهداف

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

يبدو هذا المقتطف من ملف .firebaserc صحيحًا بالنسبة لي.

المشكلات المحتملة (ربما تكون قد تحققت من هذه المشكلات ، ولكني أسردها فقط في حالة تعثر الآخرين في هذا لاحقًا):

  • تأكد من أنك تستخدم المشروع المناسب مع firebase use
  • تأكد من صحة معرف المشروع (يجب أن يتم ذلك من خلال قائمة المشروع في firebase use --add )
  • تأكد من صحة اسم الموقع (يمكن العثور عليه بسهولة عبر <site-name>.firebaseapp.com )

إذا حاولت النشر باستخدام علامة تصحيح الأخطاء على أي جزء سيعيد 404؟ أظن أنه سيأتي من POST https://firebasehosting.googleapis.com/v1beta1/sites/<site-name>/versions نظرًا لأن هذا هو الطلب الأول لنشر الاستضافة الفعلي. إذا كان هذا هو الحال ، فأعتقد أن هناك خطأ ما في اسم الموقع الذي قمت بإعداده كهدف. إذا كان طلبًا قبل ذلك ، فإن أفضل تخميني هو أن هناك شيئًا ما يتعلق بمشروعك.

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

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

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

نعم هذا صحيح ، إنه مربك بعض الشيء ، أنا متأكد من أنني أنشأت الموقع الثاني على المستوى المجاني ، ثم واجهت مشاكل في النشر واعتقدت أنه قد يكون ذلك ، لذلك قمت بالترقية. عندما أدركت أنني بحاجة إلى إثارة مشكلة على github ، قمت بخفض الدرجة ، عندما فعلت ذلك ، بدأت أشياء غريبة تحدث في وحدة تحكم الويب Firebase. سيظهر موقع الاستضافة الثاني ، لكن عندما قمت بالنقر فوقه ، سيظهر شاشة فارغة.
بعد أن تلقيت دعمك ، حاولت بعد ذلك النشر ، أظهر 404 عند النشر. لذلك اعتقدت أنني سأقوم بالترقية مرة أخرى إلى الحريق ، وعملت مثل السحر.

تواجه نفس المشكلة

isevcik حقا؟ كنت متأكدًا تمامًا من أننا أصلحنا هذه المشكلة (وكان يجب أن أغلقها حقًا). هل فعلت شيئًا مشابهًا لترقية مشروعك ، ثم خفضت درجته؟

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

isevcik لقد
لقد استخدمت هذا الأمر لإضافة هذه الأهداف بدلاً من القيام بذلك يدويًا وقد نجح.
ملاحظة: يجب عليك أيضًا إضافة الهدف إلى firebase.json.

هدف Firebase

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

مرحبًا ، نفس المشكلة:

[debug] [2019-08-09T17:34:19.322Z] TypeError: Cannot read property 'deploys' of undefined
    at /Users/kevinliu/.npm-global/lib/node_modules/firebase-tools/lib/deploy/index.js:84:36
    at processTicksAndRejections (internal/process/task_queues.js:85:5)
[error] 
[error] Error: An unexpected error has occurred.

index.js :

   if (deployedHosting) {
            _.each(context.hosting.deploys, function (deploy) {
                logger.info(clc.bold("Hosting URL:"), utils.addSubdomain(api.hostingOrigin, deploy.site));
            });
            const versionNames = context.hosting.deploys.map((deploy) => deploy.version);
            return { hosting: versionNames.length === 1 ? versionNames[0] : versionNames };
        }

hpoit أنا أتلقى هذا الخطأ أيضًا. هل قمت بحلها؟ إذا كان الأمر كذلك ، فماذا غيرت؟

[debug] [2019-08-16T18:44:01.159Z] TypeError: Cannot read property 'deploys' of undefined
    at C:\Users\Kraken\AppData\Roaming\npm\node_modules\firebase-tools\lib\deploy\index.js:84:36
    at process._tickCallback (internal/process/next_tick.js:68:7)
[error] 
[error] Error: An unexpected error has occurred.

هل تم حل هذه المشكلة لأي شخص تم الاتصال بالدعم كما اقترح Memeriaj ؟ إذا كان الأمر كذلك ، فهل يمكن نشر التفاصيل هنا للرجوع إليها في المستقبل؟

@ MaxInertia نعم لقد قمت بحلها ، لقد قمت

أعتقد أنه يلقي هذا الخطأ فقط عندما يتعذر عليه العثور على هدف النشر في التكوين الخاص بك. أود التحقق من التكوين الخاص بك في ملفي Firebase للتكوين. انشر المحتويات هنا إذا كنت تريد رأيًا ثانيًا.

نفس الشيء هنا ، عند محاولة نشر موقع ويب ثانوي باستخدام Firebase 7.3.1

في الواقع ، كان الخطأ في firebase.json ، لقد حددت "هدفًا" خاطئًا

لقد تمكنت من حل هذه المشكلة عن طريق إنشاء هدف نشر جديد بمساعدة هذا الدليل:

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

أصدرت أمرًا واحدًا:

firebase target:apply hosting blog myapp

وأضفت مفتاح target إلى firebase.json

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

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

تمكنت من حلها أيضًا. كانت مشكلتي أنه عندما أنشأت هدف النشر الخاص بي باستخدام الأمر الموضح في المستندات: $ firebase target: تطبيق اسم مورد الاستضافة المستهدفة ، كنت قد وضعت مشروعي الرئيسي كاسم المورد. لقد غيرت ذلك في ملف .firebaserc وقمت بتشغيل أمر نشر Firebase وعمل. مثال أدناه:

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

مرحبًا ، أواجه نفس المشكلة أيضًا ، بطريقة مختلفة قليلاً (للمجال المضاف المخصص)

أنا قادر على النشر في استضافة متعددة باسم هدف مختلف. ولكن عندما أحاول النشر في المجال المضاف المخصص الخاص بي. لقد تلقيت خطأ: خطأ HTTP: 404 ، لم يتم العثور على الكيان المطلوب.

المجال المخصص الخاص بي هو 3dprinter.froozen.in (تمت إضافته إلى firebase داخل الاستضافة الافتراضية بالنقر فوق زر إضافة مجال مخصص)
تمت إضافة المجال المخصص الخاص بي داخل المجال الافتراضي لمشروعي.
يرجى مساعدتي في المضي قدما

سنحتاج إلى سجلات تصحيح الأخطاء التي تعرض المكالمة الفاشلة بالضبط حتى نتمكن من المساعدة
تشخيص المشكلة.

في السبت ، 4 يناير 2020 ، الساعة 12:52 صباحًا كتب nandha [email protected] :

مرحبًا ، أنا أيضًا أواجه نفس المشكلة ، بطريقة مختلفة قليلاً (للعرف
المجال المضافة)

أنا قادر على النشر في استضافة متعددة باسم هدف مختلف. لكن
عندما أحاول النشر في المجال المضاف المخصص الخاص بي. أحصل على خطأ: HTTPخطأ: 404 ، لم يتم العثور على الكيان المطلوب.

نطاقي المخصص هو 3dprinter.froozen.in (تمت إضافته إلى firebase بالداخل
استضافة افتراضية عن طريق النقر فوق زر إضافة مجال مخصص)
تمت إضافة المجال المخصص الخاص بي داخل المجال الافتراضي لمشروعي.
يرجى مساعدتي في المضي قدما

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

مرحبا mbleigh ،

لقد تم حل مشكلتي

  1. لم يتم ربط المجال بشكل كامل
  2. تم تعديل Firebase.json الخاص بالاستضافة وفقًا للوثائق
    عند الانتهاء من كليهما ، يعمل بشكل صحيح كما هو متوقع

إذا لم يكن هناك المزيد من الاستفسارات ، فيمكننا إغلاق هذه المشكلة
في حالة وجود استفسارات يرجى التعليق أدناه

مشكلتي مع "خطأ: خطأ HTTP: 404 ، لم يتم العثور على الكيان المطلوب" حاولت استخدامه

""
"الأهداف": {
"اسم المشروع": {
"الاستضافة": {
"dev": [
"dev.site.com"
] ،
"prod": [
"site.com"
]
}
}
}


istead of

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

لقد قمت بحل مشكلتي بالتأكد من:

  1. يجب أن يحتوي .firebaserc على targets.<PROJECT_ID>.hosting.<TARGET_NAME> = [ "<HOST_ID" ]
{
  "projects": {
    "default": "my-project-id"
  },
  "targets": {
    "my-project-id": {
      "hosting": {
        "my-blog": [
          "my-blog-host-id"
        ]
      }
    }
  }
}

يمكن إنشاء الجزء targets باستخدام الأمر firebase target:apply hosting my-blog my-blog-host-id

  1. يجب أن يحتوي firebase.json على hosting كمصفوفة ، ويجب أن يحتوي target: <TARGET_NAME>
{
  "hosting": [{
    "target": "my-blog",
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }]
}

الجزء المهم هو جعل مصفوفة hosting ، وإضافة target إلى العنصر الخاص بها.

لقد تعرضت لهذا اليوم أيضًا ، وتحويل firebase.json hosting إلى مجموعة أمر مؤلم حقًا!

الآن أنا بحاجة إلى تكرار كل إدخال (حتى لو كان هو نفسه باستثناء الهدف) ، والذي يحتوي على الكثير من تكوين الرؤوس لجميع البيئات ، وفجأة هذا هو تكوين 4x json الذي أحتاج إلى إدارته.

على أي حال لإعادة استخدام الاستضافة الافتراضية من Firebase json؟

لا يُقصد من المواقع المتعددة في نفس المشروع أن تُستخدم كـ "بيئات" - إذا كان لديك موقع "مرحلة" أو "مطور" أو غير ذلك ، فيجب أن تكون هذه مواقع في مشاريع مختلفة ويمكن للأمر firebase use مساعدتك يمكنك التبديل بينها / النشر إليها بشكل مستقل.

إذا لم يكن هذا ما تفعله ، فهل يمكنك مساعدتي في فهم سبب تطابق firebase.json config لكل موقع من المواقع في مشروعك؟

حسنًا ، هذا يلخص الأمر إلى حد كبير ، لدينا حاليًا 4 بيئة مختلفة في مشاريع GCP مختلفة ، ومع ذلك فقد احتجنا لنشر بيئة مؤقتة (تتضمن أجزاء أخرى ، وليس فقط استضافة Firebase) ، وشعرنا أنه أسهل كثيرًا في إعادة استخدام القائمة مشروع Google Cloud Platform لمدة شهر أو شهرين ، بدلاً من إضافة مشروع جديد تمامًا.

الطريقة الوحيدة لتحقيق هذا الصراف الآلي هي عن طريق تكرار Firebase.json استضافة التكوين 5 مرات وإضافة هدف فريد لكل تكوين.

أعتقد أن مصدر الارتباك هو أنه إذا كان لديك تكوين استضافة افتراضي ، فستكون التوقعات أنه سيعمل مع أي هدف أو مشروع ، لكنني أعتقد أن هذا هو سوء فهمي لكيفية استخدامه بواسطة مشاريع مختلفة ، مقارنةً بالمشروع + الهدف.

من الواضح أنه لا يزال بإمكانه إنجاحه ، استغرق الأمر وقتًا طويلاً وفهم سبب ظهور هذا الخطأ.
2020-06-22T17:20:39.837Z] TypeError: Cannot read property 'deploys' of undefined

رسالة الخطأ هي بالتأكيد سيئة في كلتا الحالتين ، و FWIW لدينا حل أفضل لـ "المعاينات المؤقتة" قيد التطوير الآن 😄

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

{ "hosting": [ { "target": "web", "public": "public", "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], "rewrites": [ { "source": "**", "destination": "/index.html" } ] }, { "target": "admin", "public": "build", "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], "rewrites": [ { "source": "**", "destination": "/index.html" } ] } ] }

ولكن بعد ذلك ، أعاد "المسؤول" صفحة فارغة ، نظرًا لأننا نستخدم React ، كانت الحيلة هي جعل النقطة العامة للبناء.
"public": "build",

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

  1. تشغيل: firebase target:apply hosting second-project-id second-project-id

  2. ثم افتح ملف .firebaserc وتأكد من ظهوره بالشكل التالي
    "{
    "الأهداف": {

    "معرّف المشروع الرئيسي": {
    "الاستضافة": {
    "معرّف المشروع الثاني": [
    "معرّف المشروع الثاني"
    ]
    }
    }
    }
    } `

  3. ثم افتح ملف firebase.json وتأكد من احتوائه على ما يلي
    "الهدف": "معرّف المشروع الثاني" ،

حسنًا ، لا أعرف بالضبط ما فعلته لإنجاحه ، لكنه يعمل حاليًا مع .firebaserc :

{
  "projects": {
    "default": "mainProjectId"
  },
  "targets": {
    "mainProjectId": {
      "hosting": {
        "production": [
          "mainProjectId"
        ],
        "staging": [
          "secondProjectId"
        ]
      }
    }
  }
}
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات