Firebase-tools: Невозможно прочитать свойство «развертывания» неопределенного

Созданный на 1 мая 2019  ·  36Комментарии  ·  Источник: firebase/firebase-tools

Информация об окружающей среде


инструменты firebase:
[email protected]


Платформа:
MacOS

Прецедент

MacOS, Node 10.15.3, [email protected]

Действия по воспроизведению

Создайте два хостинговых сайта на консоли firebase.
Бежать
'firebase target: применить хостинг dev firebase-hosting-id'
Бежать
'firebase deploy --only hosting: 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, а не в файле json firebase.

В разделе хостинга файла firebase.json вам нужно иметь "target": "dev" чтобы firebase deploy --only hosting:dev работал. Флаг --only работает как фильтр, и без поля target в вашей конфигурации хостинга CLI ничего не развертывает (что должно быть ошибкой с полезным сообщением, но сейчас просто слепо принимает Это).

Извините, не ясно, где в json разместить целевое поле, поместил бы я его в корень json (это не сработало) или оно должно быть в корне хостинга (также не сработало для меня).

Также мой файл firebaserc ссылается на мой корневой проект, но в нем нет ссылки на мой второй хостинговый сайт, поэтому я не уверен, как инструмент CLI сможет понять, куда его развернуть.

Он должен находиться в разделе Hosting вашего файла 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 должно быть именем сайта, на котором вы планируете развернуть. Это устанавливает цель для проекта, в котором вы сейчас находитесь в интерфейсе командной строки, который берется из команды 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 поскольку это первый запрос фактического развертывания хостинга. Если это так, то я бы подумал, что что-то не так с именем сайта, которое вы настроили в качестве целевого. Если это запрос до этого, то я думаю, что с вашим проектом что-то не так.

Хорошо, удалось разобраться в том, что происходит.
Для этого вам также нужно более качественное сообщение об ошибке, поэтому, ЕСЛИ вы не используете blaze и выше, сообщение об ошибке - 404, не очевидно, что я не могу развернуть из-за моего тарифного плана.
После апгрейда, бум, все работает.
Спасибо за помощь, мы рады, что проблема закрыта.

Подожди. Вам нужно было перейти на Blaze, чтобы ваше развертывание работало? Что это, потому что вы еще не создали новый хостинг-сайт и для этого нужно обновить его? Или вы ранее перешли на Blaze, создали второй хостинг-сайт, понизили тарифный план и затем попытались развернуть?

Также вы знаете, какой запрос вызывал эту ошибку? Поскольку вы правы, эта ошибка совершенно бесполезна, и я хочу отследить, откуда она возникла, чтобы я мог дать некоторые рекомендации о том, что делать, вместо некоторого общего текста 404.

Да, это немного сбивает с толку, я почти уверен, что создал второй сайт на бесплатном уровне, затем у меня возникли проблемы с развертыванием и я подумал, что это может быть так, поэтому я обновился. Когда я понял, что мне нужно поднять проблему на github, я понизил версию, когда я это сделал, в веб-консоли firebase начали происходить странные вещи. Появится второй веб-сайт хостинга, но когда я щелкну по нему, он покажет пустой экран.
После того, как я получил вашу поддержку, я попытался развернуть, он показал 404 при развертывании. Так что я подумал, что обновлюсь до Blaze, и как по волшебству это сработало.

с такой же проблемой

@isevcik правда? Я был почти уверен, что мы исправили эту проблему (и мне действительно следовало закрыть это). Вы проделали то же самое, обновив свой проект, а затем понизив его?

Вам, вероятно, следует написать в службу поддержки, чтобы мы могли получить подробную информацию о вашем проекте и исправить его. Вы должны обязательно упомянуть эту проблему GitHub и меня, чтобы они знали, кому ее отправить.

@isevcik Я получал ту же ошибку и думал, что у меня такая же проблема, но это оказалось опечаткой в ​​projectid в .firebaserc.
Я использовал эту команду для добавления этих целей, а не делал это вручную, и она сработала.
Примечание. Вы также должны добавить цель в firebase.json.

firebase target: применить тип имя-цели имя-ресурса

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.

Было ли это решено для тех, кто обратился в службу поддержки, как предложил

@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",
    ...
  }
  ...
}

edit: Я столкнулся с этой проблемой, когда настраивал свой первый хостинг для своего нового проекта Firebase.

Я тоже смог решить это. Моя проблема заключалась в том, что когда я создал свою цель развертывания с помощью команды, описанной в документах: $ firebase target: apply hosting target-name resource-name , я указал свой основной проект в качестве имени ресурса. Я изменил это в файле .firebaserc и запустил команду развертывания firebase, и она сработала. Пример ниже:

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

Привет, я тоже столкнулся с той же проблемой, немного по-другому (для добавленного пользователем домена)

Я могу развернуть на нескольких хостингах с другим целевым именем. но когда я пытаюсь развернуть в свой добавленный домен. Я получаю сообщение об ошибке: ошибка HTTP: 404, запрошенный объект не найден.

Мой пользовательский домен - 3dprinter.froozen.in (добавлен в firebase внутри хостинга по умолчанию, нажав кнопку добавления пользовательского домена)
Мой личный домен добавлен в домен моего проекта по умолчанию.
Пожалуйста, помогите мне продолжить

Нам потребуются журналы отладки, показывающие точный сбойный вызов, чтобы иметь возможность помочь
диагностировать проблему.

В сб, 4 января 2020 г., 00:52 nandha [email protected] написал:

Привет, я тоже столкнулся с той же проблемой, но немного по-другому (для пользовательских
добавлен домен)

Я могу развернуть на нескольких хостингах с другим целевым именем. но
когда я пытаюсь выполнить развертывание в моем добавленном домене. Я получаю сообщение об ошибке: HTTPОшибка: 404, запрошенный объект не найден.

Мой личный домен - 3dprinter.froozen.in (добавлен в firebase внутри
хостинг по умолчанию, нажав кнопку добавления личного домена)
Мой личный домен добавлен в домен моего проекта по умолчанию.
Пожалуйста, помогите мне продолжить

-
Вы получаете это, потому что подписаны на эту ветку.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/firebase/firebase-tools/issues/1232?email_source=notifications&email_token=AAAAH7SNCPUEIMIWCDHK6CDQ4BE4JA5CNFSM4HJWK5J2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEICTYYY#issuecomment-570768483 ,
или отписаться
https://github.com/notifications/unsubscribe-auth/AAAAH7V26G3YF6Q7FYDP5QTQ4BE4JANCNFSM4HJWK5JQ
.

Привет @mbleigh ,

Моя проблема решена

  1. Домен не был полностью привязан
  2. Firebase.json хостинга был изменен согласно документации
    Когда оба выполнены, все заработало должным образом, как и ожидалось.

Если больше нет запросов, мы можем закрыть эту проблему
В случае возникновения вопросов, оставьте комментарий ниже.

Моя проблема с «Ошибка: ошибка HTTP: 404, запрошенный объект не найден». Я пытался использовать

`` ''
"target": {
"название проекта": {
"hosting": {
"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 для каждого из сайтов в вашем проекте идентична?

Что ж, это в значительной степени подводит итог, в настоящее время у нас есть 4 разных env в разных проектах GCP, однако нам нужно было развернуть временный env (который включает в себя другие части, а не только хостинг firebase), было намного проще повторно использовать существующие Проект GCP на месяц или два, а не добавление нового.

Единственный способ добиться этого - 5 раз продублировать конфигурацию хостинга firebase.json и добавить уникальную цель в каждую конфигурацию.

Я предполагаю, откуда возникает путаница: если у вас есть конфигурация хостинга по умолчанию, ожидалось, что он будет работать с любой целью или проектом, но я думаю, что я неправильно понимаю, как он используется в разных проектах по сравнению с проектом + цель.

Очевидно, все еще можно заставить его работать, просто потребовалось некоторое время, чтобы понять, почему появилась эта ошибка.
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 и убедитесь, что он выглядит следующим образом
    `{
    "target": {

    "main-project-id": {
    "hosting": {
    "второй-идентификатор-проекта": [
    "второй-идентификатор-проекта"
    ]
    }
    }
    }
    } `

  3. затем откройте файл firebase.json и убедитесь, что в нем есть следующие
    "цель": "второй-идентификатор-проекта",

Хм, я точно не знаю, что я сделал, чтобы он заработал, но в настоящее время он работает с этим .firebaserc :

{
  "projects": {
    "default": "mainProjectId"
  },
  "targets": {
    "mainProjectId": {
      "hosting": {
        "production": [
          "mainProjectId"
        ],
        "staging": [
          "secondProjectId"
        ]
      }
    }
  }
}
Была ли эта страница полезной?
0 / 5 - 0 рейтинги