From e72c04a94ad82bd88afb568ae4cecbf6c0ab61a6 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 4 Oct 2023 12:48:30 -0300 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=90=9B=20fix(=5F=5Fmain=5F=5F.py):=20?= =?UTF-8?q?set=20OBJC=5FDISABLE=5FINITIALIZE=5FFORK=5FSAFETY=20environment?= =?UTF-8?q?=20variable=20on=20MacOS=20to=20avoid=20error=20when=20running?= =?UTF-8?q?=20gunicorn=20=E2=9C=A8=20feat(=5F=5Fmain=5F=5F.py):=20load=20e?= =?UTF-8?q?nvironment=20variables=20from=20.env=20file=20to=20override=20e?= =?UTF-8?q?xisting=20environment=20variables?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/__main__.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/backend/langflow/__main__.py b/src/backend/langflow/__main__.py index b04cbbd18..dfc2e27a5 100644 --- a/src/backend/langflow/__main__.py +++ b/src/backend/langflow/__main__.py @@ -52,6 +52,18 @@ def display_results(results): console.print() # Print a new line +def set_var_for_macos_issue(): + # OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES + # we need to set this var is we are running on MacOS + # otherwise we get an error when running gunicorn + + if platform.system() in ["Darwin"]: + import os + + os.environ["OBJC_DISABLE_INITIALIZE_FORK_SAFETY"] = "YES" + logger.debug("Set OBJC_DISABLE_INITIALIZE_FORK_SAFETY to YES to avoid error") + + def update_settings( config: str, cache: Optional[str] = None, @@ -143,7 +155,10 @@ def run( """ Run the Langflow. """ + + set_var_for_macos_issue() # override env variables with .env file + if env_file: load_dotenv(env_file, override=True) @@ -165,7 +180,6 @@ def run( options = { "bind": f"{host}:{port}", "workers": get_number_of_workers(workers), - "worker_class": "uvicorn.workers.UvicornWorker", "timeout": timeout, } From f9d9adf60b033fe35bb234f5d380afee1174745f Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 4 Oct 2023 12:49:10 -0300 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=90=9B=20fix(manager.py):=20catch=20a?= =?UTF-8?q?nd=20log=20exceptions=20when=20tearing=20down=20services=20to?= =?UTF-8?q?=20prevent=20silent=20failures=20=F0=9F=90=9B=20fix(utils.py):?= =?UTF-8?q?=20catch=20and=20log=20exceptions=20when=20tearing=20down=20ser?= =?UTF-8?q?vices=20and=20superuser=20to=20prevent=20silent=20failures?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/services/manager.py | 11 ++++------- src/backend/langflow/services/utils.py | 3 +++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/backend/langflow/services/manager.py b/src/backend/langflow/services/manager.py index 496544829..078d694d5 100644 --- a/src/backend/langflow/services/manager.py +++ b/src/backend/langflow/services/manager.py @@ -90,7 +90,10 @@ class ServiceManager: if service is None: continue logger.debug(f"Teardown service {service.name}") - service.teardown() + try: + service.teardown() + except Exception as exc: + logger.exception(exc) self.services = {} self.factories = {} self.dependencies = {} @@ -150,9 +153,3 @@ def initialize_session_service(): dependencies=[ServiceType.CACHE_SERVICE], ) - -def teardown_services(): - """ - Teardown all the services. - """ - service_manager.teardown() diff --git a/src/backend/langflow/services/utils.py b/src/backend/langflow/services/utils.py index c17963bc3..1909088bd 100644 --- a/src/backend/langflow/services/utils.py +++ b/src/backend/langflow/services/utils.py @@ -153,6 +153,9 @@ def teardown_services(): """ try: teardown_superuser(get_settings_service(), next(get_session())) + except Exception as exc: + logger.exception(exc) + try: service_manager.teardown() except Exception as exc: logger.exception(exc) From 62711a08cdc7ebb78f17258a36cec2d237d6c620 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 4 Oct 2023 12:49:30 -0300 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=94=A7=20chore(server.py):=20configur?= =?UTF-8?q?e=20gunicorn=20to=20use=20UvicornWorker=20as=20the=20worker=20c?= =?UTF-8?q?lass=20for=20improved=20performance=20and=20compatibility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/server.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/langflow/server.py b/src/backend/langflow/server.py index a96f8b7e0..3a2943444 100644 --- a/src/backend/langflow/server.py +++ b/src/backend/langflow/server.py @@ -4,6 +4,8 @@ from gunicorn.app.base import BaseApplication # type: ignore class LangflowApplication(BaseApplication): def __init__(self, app, options=None): self.options = options or {} + + self.options["worker_class"] = "uvicorn.workers.UvicornWorker" self.application = app super().__init__() From 16ffde61ec40acd57510e6c35317cb9ff8797e8a Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 4 Oct 2023 12:50:14 -0300 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=94=96=20chore(pyproject.toml):=20bum?= =?UTF-8?q?p=20version=20from=200.5.0b3=20to=200.5.0b4=20for=20package=20r?= =?UTF-8?q?elease?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 720dc5ed4..cc00ed6ed 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langflow" -version = "0.5.0b3" +version = "0.5.0b4" description = "A Python package with a built-in web application" authors = ["Logspace "] maintainers = [