Firebase-tools не загружает вновь созданные функции в Firebase - PullRequest
0 голосов
/ 21 апреля 2019

Я работаю над проектом Angular и пишу функции Firebase, которые я хотел бы развернуть в Firebase.Поскольку я пишу больше функций для Firebase и пытаюсь развернуть их в Firebase, используя firebase deploy --only functions, будут развернуты только существующие функции.В частности, у меня есть 16 функций, которые я хотел бы развернуть в Firebase, но развернуто только те же 12.

До сих пор я сделал следующее, чтобы попытаться решить проблему:

  1. Я убедился, что использую последние Firebase-инструменты (6.7.0)
  2. Я попытался указать новые написанные функции, которые я хотел бы развернуть, используя firebase deploy --only functions:<NEW FUNCTION NAME HERE>
  3. Удалитьвсе функции экспорта из файла functions / src / index.ts и загрузите пустой index.ts.Даже при использовании пустого файла index.ts те же функции по-прежнему развертываются в Firebase.
  4. Я знаю, что при загрузке функций в Firebase может быть до 30 секунд, поэтому я даже ждалвсю ночь, прежде чем пытаться загрузить новые функции.
  5. Я начал с нуля, используя firebase init, чтобы воссоздать весь каталог функций, и он все еще продолжает загружать те же функции.
  6. Я обновился сбесплатный план Firebase для плана Spark.

Следующий код является основным файлом index.ts, который находится в файле functions / src / index.ts.

import * as functions from 'firebase-functions';
import { firestore } from 'firebase-admin';
import * as moment from 'moment';
import { request } from 'https';

// Local Functions Imports
import * as Permissions from './permissions';
import * as Groups from './groups';
import * as Shifts from './shifts';
import * as Roles from './roles';
import * as Session from './sessions';
import * as Users from './users';
import * as Slack from './slack';
import * as ScheduleChanges from './schedule-changes';
import * as Email from './email';

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

/* -------- USER MANAGEMENT -------------- */
export const createUser = Users.createUser;
export const addUserToDefaultJoinGroups = Users.addUserToDefaultJoinGroups;
export const deleteUser = Users.deleteUser;

/* -------- SESSION MANAGEMENT -------------- */
export const addSessionID = Session.addSessionID;

/* -------- ROLE MANAGEMENT -------------- */
export const addRoleID = Roles.addRoleID;
export const removeAllShiftsAssociatedWithRole = Roles.removeAllShiftsAssociatedWithRole;

/* -------- SHIFT MANAGEMENT -------------- */
export const addShiftID = Shifts.addShiftID;
export const hourly_job = Shifts.hourly_job;
export const changeShiftStatsTest = Shifts.changeShiftStatsTest;

/* -------- GROUPS MANAGEMENT -------------- */
export const addGroupID = Groups.addGroupID;
export const addGroupIDNewTestFunction = Groups.addGroupIDNewTestFunction;

/* -------- PERMISSIONS MANAGEMENT -------------- */
export const addPermissionID = Permissions.addPermissionID;

/* -------- Emailing -------------- */
export const sendWelcomeEmailToNewUser = Email.sendWelcomeEmailToNewUser;
export const sendWelcomeEmailToNewUser2 = Email.sendWelcomeEmailToNewUser2;

/* -------- SLACK MESSAGING MANAGEMENT -------------- */
export const sendWelcomingMessage = Slack.sendWelcomingMessage;

/* -------- SCHEDULE CHANGES MANAGEMENT -------------- */
export const addScheduleChangeID = ScheduleChanges.addScheduleChangeID;

Как виднов приведенном выше коде есть 16 функций, которые должны быть развернуты в Firebase.Тем не менее, только 12 развернуты.Следующий фрагмент кода взят из функций / src / groups / index.ts.В этом файле addGroupID является существующей функцией, которая постоянно развертывается в Firebase.С другой стороны, addGroupIDNewTestFunction - это новая функция, которая не развертывается в Firebase, даже если они находятся в одном файле и на них ссылаются одинаково.

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin'

export const addGroupID = functions.firestore
.document("organizations/{organizationID}/groups/{groupID}")
.onCreate(async (snap, context) => {
    console.log("Adding group id");
    await admin.firestore()
    .doc(`organizations/${context.params.organizationID}/groups/${context.params.groupID}`).update({
        'groupID': context.params.groupID
    })
})

export const addGroupIDNewTestFunction = functions.firestore
.document("organizations/{organizationID}/groups2/{groupID}")
.onCreate(async (snap, context) => {
    console.log("Adding group id");
    await admin.firestore()
    .doc(`organizations/${context.params.organizationID}/groups/${context.params.groupID}`).update({
        'groupID': context.params.groupID
    })
})

Как упоминалось ранее, я указал 16функции в основном файле index.ts, которые должны быть развернуты в функциях Firebase.Однако только 12 существующих функций развертываются.Следующий фрагмент кода является выходной базой данных, которую дает мне при запуске firebase deploy --only functions внутри проекта Angular.

firebase deploy --only functions

=== Deploying to 'university-scheduling'...

i  deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint

> functions@ lint /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions
> tslint --project tsconfig.json

no-unused-variable is deprecated. Since TypeScript 2.9. Please use the built-in compiler checks instead.

Could not find implementations for the following rules specified in the configuration:
    use-input-property-decorator
    use-output-property-decorator
    use-host-property-decorator
Try upgrading TSLint and/or ensuring that you have all necessary custom rules installed.
If TSLint was recently upgraded, you may have old rules configured which need to be cleaned up.


WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/email/index.ts:2:13 - 'admin' is declared but its value is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/index.ts:2:1 - All imports on this line are unused.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/index.ts:3:13 - 'moment' is declared but its value is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/index.ts:4:1 - All imports on this line are unused.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/slack/index.ts:2:13 - 'admin' is declared but its value is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/slack/index.ts:6:7 - 'request' is declared but its value is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/slack/index.ts:7:7 - 'options' is declared but its value is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/users/index.ts:3:1 - All imports on this line are unused.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/users/index.ts:43:11 - 'groups' is declared but itsvalue is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/users/index.ts:65:11 - 'uid' is declared but its value is never read.

Running command: npm --prefix "$RESOURCE_DIR" run build

> functions@ build /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions
> tsc

✔  functions: Finished running predeploy script.
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (106.24 KB) for uploading
✔  functions: functions folder uploaded successfully
⚠  appEngineLocation us-central1
i  functions: updating Node.js 6 function createUser(us-central1)...
i  functions: updating Node.js 6 function deleteUser(us-central1)...
i  functions: updating Node.js 6 function addSessionID(us-central1)...
i  functions: updating Node.js 6 function addRoleID(us-central1)...
i  functions: updating Node.js 6 function removeAllShiftsAssociatedWithRole(us-central1)...
i  functions: updating Node.js 6 function addShiftID(us-central1)...
i  functions: updating Node.js 6 function hourly_job(us-central1)...
i  functions: updating Node.js 6 function changeShiftStatsTest(us-central1)...
i  functions: updating Node.js 6 function addGroupID(us-central1)...
i  functions: updating Node.js 6 function addPermissionID(us-central1)...
i  functions: updating Node.js 6 function sendWelcomingMessage(us-central1)...
i  functions: updating Node.js 6 function addScheduleChangeID(us-central1)...
✔  scheduler: all necessary APIs are enabled
✔  functions[addPermissionID(us-central1)]: Successful update operation.
✔  functions[createUser(us-central1)]: Successful update operation.
✔  functions[addShiftID(us-central1)]: Successful update operation.
✔  functions[changeShiftStatsTest(us-central1)]: Successful update operation.
✔  functions[sendWelcomingMessage(us-central1)]: Successful update operation.
✔  functions[hourly_job(us-central1)]: Successful update operation.
✔  functions[addSessionID(us-central1)]: Successful update operation.
✔  functions[deleteUser(us-central1)]: Successful update operation.
✔  functions[addGroupID(us-central1)]: Successful update operation.
✔  functions[removeAllShiftsAssociatedWithRole(us-central1)]: Successful update operation.
✔  functions[addScheduleChangeID(us-central1)]: Successful update operation.
✔  functions[addRoleID(us-central1)]: Successful update operation.

✔  Deploy complete!

Please note that it can take up to 30 seconds for your updated functions to propagate.

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Я хотел бы дать вам, ребята, обновленную информацию о решении проблемы, которую я описал выше. В одном из моих файлов index.ts у меня было следующее требование require: var mailgun = require ('mailgun-js'). Всякий раз, когда я заменил этот оператор require на import * как mailgun из 'mailgun-js', все функции были развернуты должным образом.

Самым запутанным моментом во всей этой проблеме было то, что я получал сообщения об успехе, даже когда что-то не работало должным образом. Благодарю вас, ребята, за оперативную поддержку и все ваши предложения !!

0 голосов
/ 22 апреля 2019

Вам следует проверить каталог, в который скомпилированы js-файлы.

По умолчанию functions/lib/.

Если вы импортируете как ../../foo.ts где-нибудь в functions/src или functions/src/tests и т. Д., То скомпилированный js-файл будет functions/lib/{any}/foo.js.

Целевые файлы развертывания - только functions/lib/*.js.Таким образом, functions/lib/{any}/foo.js игнорируется.

Вам следует изменить структуру каталогов или файлов.

Если причиной являются тестовые файлы, вы должны указать tsconfig.json для развертывания и исключить их.

...