Почему Firebase говорит, что мое приложение не существует и уже существует одновременно? - PullRequest
0 голосов
/ 15 марта 2020

Я стараюсь инициализировать свое приложение Firebase в моем Python проекте. Я выполняю эту инициализацию только в одном месте, но продолжаю получать сообщения об ошибках в уже существующем приложении.

Чтобы исправить проблему, я изменил код инициализации, чтобы попытаться перехватить ошибки:

class Firestore(Datastore):
    _app: firebase_admin.App
    _db: firestore.client

    def __init__(self):
        try:
            self._app = firebase_admin.get_app('TaskRatchet')
        except ValueError:
            is_dev = 'TR_ENV' in os.environ and os.environ['TR_ENV'] == 'development'
            base_path = f'{pathlib.Path(__file__).parent.absolute()}/../../'
            dev_cred = f'{base_path}/[file name].json'
            prod_cred = f'{base_path}/[file name].json'
            path = dev_cred if is_dev else prod_cred
            cred = credentials.Certificate(path)

            self._app = firebase_admin.initialize_app(credential=cred, name='TaskRatchet')

        self._db = firestore.client(self._app)

Но теперь говорится, что приложение существует и не существует одновременно!

function_1 | ValueError: Приложение Firebase с именем «TaskRatchet» не существует. Обязательно инициализируйте SDK, вызвав initialize_app () с именем приложения в качестве второго аргумента.

function_1 |

function_1 | Во время обработки вышеупомянутого исключения произошло другое исключение:

function_1 | [...]

function_1 | ValueError: Приложение Firebase с именем «TaskRatchet» уже существует. Это означает, что вы вызывали initialize_app () более одного раза с тем же именем приложения, что и второй аргумент. Убедитесь, что вы предоставляете уникальное имя каждый раз, когда вызываете initialize_app ().

Как, черт возьми, я получаю ошибки, утверждая, что приложение не существует и существует одновременно, и в одном и том же исключении цепочка?

И как я могу изящно убедиться, что создано только одно приложение?


В случае, если это поможет, вот полная соответствующая часть цепочки исключений:

function_1 | ОШИБКА: tr_api.main: фатальная ошибка

function_1 | Traceback (последний вызов был последним):

function_1 | Файл "/usr/src/app/tr_api/datastores/firestore.py", строка 16, в init

function_1 | self._app = firebase_admin.get_app ('TaskRatchet')

function_1 | Файл "/usr/local/lib/python3.8/site-packages/firebase_admin/init.py", строка 139, в get_app

function_1 | поднять ValueError (

function_1 | ValueError: Приложение Firebase с именем «TaskRatchet» не существует. Убедитесь, что инициализировали SDK, вызвав initialize_app () с именем приложения в качестве второго аргумента.

function_1 |

function_1 | Во время обработки вышеупомянутого исключения произошло другое исключение:

function_1 |

function_1 | Traceback (последний последний вызов):

function_1 | Файл "/usr/src/app/tr_api/main.py", строка 46, в основном

function_1 | datastore = factory.secure (Firestore)

function_1 | File "/ usr / src / app / tr_api / factory.py ", строка 17, в защищенном виде

function_1 | obj = self.make (class_, ** kwargs)

function_1 | File" / usr /src/app/tr_api/factory.py ", строка 26, в make

function_1 | класс возврата _ (** deps)

function_1 | File" / usr / src / app / tr_api /datastores/firestore.py ", строка 25, в init

function_1 | self._app = firebase_admin.initialize_app (cred ential = cred, name = 'TaskRatchet')

function_1 | Файл "/usr/local/lib/python3.8/site-packages/firebase_admin/init.py", строка 79, в initialize_app

function_1 | поднять ValueError ((

function_1 | ValueError: приложение Firebase с именем «TaskRatchet» уже существует. Это означает, что вы вызывали initialize_app () более одного раза с тем же именем приложения, что и второй аргумент. Убедитесь, что вы указали уникальное имя каждый раз, когда вы вызываете initialize_app ().

1 Ответ

1 голос
/ 15 марта 2020

Переписывание моей функции инициализации таким образом, похоже, решило проблему:

class Firestore(Datastore):
    _app: firebase_admin.App
    _db: firestore.client

    def __init__(self):
        is_dev = 'TR_ENV' in os.environ and os.environ['TR_ENV'] == 'development'
        base_path = f'{pathlib.Path(__file__).parent.absolute()}/../../'
        dev_cred = f'{base_path}/[file name].json'
        prod_cred = f'{base_path}/[file name].json'
        path = dev_cred if is_dev else prod_cred
        cred = credentials.Certificate(path)

        try:
            self._app = firebase_admin.get_app('TaskRatchet')
        except ValueError:
            self._app = firebase_admin.initialize_app(credential=cred, name='TaskRatchet')

        self._db = firestore.client(self._app)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...