Installing pilot makes existing bench (and running installed app) unuseable
- Dominant language
- Python
- Stars
- 101
- Forks
- 61
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 41
Description
After installing pilot, an existing bench, running an installed app (erpnext), was unuseable.
That bench was installed with a frappe-bench from rtCamp and the erpnext configured on it worked just fine.
After installing pilot it only showed an operational error:
```OperationalError
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)")
Traceback (most recent call last)
This is the Copy/Paste friendly version of the traceback.
Traceback (most recent call last):
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 649, in connect
sock = socket.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/socket.py", line 852, in create_connection
raise exceptions[0]
File "/usr/lib/python3.12/socket.py", line 837, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/serve.py", line 19, in get_response
endpoint, renderer_instance = path_resolver.resolve()
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/path_resolver.py", line 38, in resolve
resolve_redirect(self.path, request.query_string)
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/path_resolver.py", line 118, in resolve_redirect
redirects += frappe.get_all(
^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/__init__.py", line 2065, in get_all
return get_list(doctype, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/__init__.py", line 2040, in get_list
return frappe.model.db_query.DatabaseQuery(doctype).execute(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/model/db_query.py", line 427, in execute
result = self.build_and_run()
^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/model/db_query.py", line 476, in build_and_run
return frappe.db.sql(
^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/database.py", line 207, in sql
self.connect()
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/database.py", line 112, in connect
self._conn: MariadbConnection | PostgresConnection = self.get_connection()
^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 108, in get_connection
conn = self._get_connection()
^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 114, in _get_connection
return self.create_connection()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 117, in create_connection
return pymysql.connect(**self.get_connection_settings())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 361, in __init__
self.connect()
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 716, in connect
raise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)")
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 649, in connect
sock = socket.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/socket.py", line 852, in create_connection
raise exceptions[0]
File "/usr/lib/python3.12/socket.py", line 837, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/peer/frappe/bench2/apps/frappe/frappe/app.py", line 135, in application
response = get_response()
^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/serve.py", line 23, in get_response
return handle_exception(e, endpoint, path, http_status_code)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/permissions.py", line 891, in wrapper
return fn(e, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/serve.py", line 37, in handle_exception
return ErrorPage(exception=e).render()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/page_renderers/template_page.py", line 84, in render
html = self.get_html()
^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/utils.py", line 534, in cache_html_decorator
html = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/page_renderers/template_page.py", line 92, in get_html
self.init_context()
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/page_renderers/error_page.py", line 14, in init_context
super().init_context()
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/page_renderers/base_template_page.py", line 15, in init_context
self.context.update(get_website_settings())
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/doctype/website_settings/website_settings.py", line 263, in get_website_settings
context.boot = get_boot_data()
^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/utils.py", line 171, in get_boot_data
apps = get_apps() or []
^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/utils/typing_validations.py", line 32, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/apps.py", line 20, in get_apps
allowed_workspaces = get_workspace_sidebar_items().get("pages")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/utils/typing_validations.py", line 32, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/desk/desktop.py", line 459, in get_workspace_sidebar_items
all_pages = frappe.get_all(
^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/__init__.py", line 2065, in get_all
return get_list(doctype, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/__init__.py", line 2040, in get_list
return frappe.model.db_query.DatabaseQuery(doctype).execute(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/model/db_query.py", line 427, in execute
result = self.build_and_run()
^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/model/db_query.py", line 476, in build_and_run
return frappe.db.sql(
^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/database.py", line 207, in sql
self.connect()
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/database.py", line 112, in connect
self._conn: MariadbConnection | PostgresConnection = self.get_connection()
^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 108, in get_connection
conn = self._get_connection()
^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 114, in _get_connection
return self.create_connection()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 117, in create_connection
return pymysql.connect(**self.get_connection_settings())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 361, in __init__
self.connect()
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 716, in connect
raise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)")
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 649, in connect
sock = socket.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/socket.py", line 852, in create_connection
raise exceptions[0]
File "/usr/lib/python3.12/socket.py", line 837, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/serve.py", line 19, in get_response
endpoint, renderer_instance = path_resolver.resolve()
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/path_resolver.py", line 38, in resolve
resolve_redirect(self.path, request.query_string)
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/path_resolver.py", line 118, in resolve_redirect
redirects += frappe.get_all(
^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/__init__.py", line 2065, in get_all
return get_list(doctype, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/__init__.py", line 2040, in get_list
return frappe.model.db_query.DatabaseQuery(doctype).execute(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/model/db_query.py", line 427, in execute
result = self.build_and_run()
^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/model/db_query.py", line 476, in build_and_run
return frappe.db.sql(
^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/database.py", line 207, in sql
self.connect()
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/database.py", line 112, in connect
self._conn: MariadbConnection | PostgresConnection = self.get_connection()
^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 108, in get_connection
conn = self._get_connection()
^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 114, in _get_connection
return self.create_connection()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 117, in create_connection
return pymysql.connect(**self.get_connection_settings())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 361, in __init__
self.connect()
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 716, in connect
raise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)")
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 649, in connect
sock = socket.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/socket.py", line 852, in create_connection
raise exceptions[0]
File "/usr/lib/python3.12/socket.py", line 837, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/peer/frappe/bench2/apps/frappe/frappe/middlewares.py", line 16, in __call__
return super().__call__(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/werkzeug/middleware/shared_data.py", line 250, in __call__
return self.app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/werkzeug/middleware/shared_data.py", line 250, in __call__
return self.app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/app.py", line 85, in application
app(environ, start_response),
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/werkzeug/wrappers/request.py", line 193, in application
resp = f(*args[:-2] + (request,))
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/app.py", line 144, in application
response = handle_exception(e)
^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/permissions.py", line 891, in wrapper
return fn(e, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/app.py", line 405, in handle_exception
response = get_response("message", http_status_code=http_status_code)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/serve.py", line 23, in get_response
return handle_exception(e, endpoint, path, http_status_code)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/permissions.py", line 891, in wrapper
return fn(e, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/serve.py", line 37, in handle_exception
return ErrorPage(exception=e).render()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/page_renderers/template_page.py", line 84, in render
html = self.get_html()
^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/utils.py", line 534, in cache_html_decorator
html = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/page_renderers/template_page.py", line 92, in get_html
self.init_context()
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/page_renderers/error_page.py", line 14, in init_context
super().init_context()
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/page_renderers/base_template_page.py", line 15, in init_context
self.context.update(get_website_settings())
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/doctype/website_settings/website_settings.py", line 263, in get_website_settings
context.boot = get_boot_data()
^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/website/utils.py", line 171, in get_boot_data
apps = get_apps() or []
^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/utils/typing_validations.py", line 32, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/apps.py", line 20, in get_apps
allowed_workspaces = get_workspace_sidebar_items().get("pages")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/utils/typing_validations.py", line 32, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/desk/desktop.py", line 459, in get_workspace_sidebar_items
all_pages = frappe.get_all(
^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/__init__.py", line 2065, in get_all
return get_list(doctype, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/__init__.py", line 2040, in get_list
return frappe.model.db_query.DatabaseQuery(doctype).execute(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/model/db_query.py", line 427, in execute
result = self.build_and_run()
^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/model/db_query.py", line 476, in build_and_run
return frappe.db.sql(
^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/database.py", line 207, in sql
self.connect()
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/database.py", line 112, in connect
self._conn: MariadbConnection | PostgresConnection = self.get_connection()
^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 108, in get_connection
conn = self._get_connection()
^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 114, in _get_connection
return self.create_connection()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/apps/frappe/frappe/database/mariadb/database.py", line 117, in create_connection
return pymysql.connect(**self.get_connection_settings())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 361, in __init__
self.connect()
File "/home/peer/frappe/bench2/env/lib/python3.12/site-packages/pymysql/connections.py", line 716, in connect
raise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)")
The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error.
To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it.
Brought to you by DON'T PANIC, your friendly Werkzeug powered traceback interpreter.
```
Expected outcome:
- Best: Existing bench installations (of whatever type) continue to run.
- Second best: Relevant warnings during installation and in the documentation and README of pilot.
- Also: correct version compatibility/requirement information.
- Information about all the things that will be stomped over.
- Warnings / confirmation dialogs regarding expected destructions if proceeding.
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the failure by installing pilot alongside the existing bench and erpnext app, then inspect whether the MySQL service or bench configuration changes. Start with the connection failure in frappe/database/mariadb/database.py and the related traceback paths in frappe/website/serve.py. Done means the existing bench and installed app remain usable after pilot installation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- mysql, python
- Domain
- databases, devops
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 38/100