I have v.14 with my custom app installed in a server. Now how can I upgrade it to v.15 without losing any data?
You have two options to upgrade from v14 to v15.
Option 1 is to first upgrade v14 to the latest version of itself. After that, take a complete backup of your data and files. Then, you can set up a new v15 version bench, install the necessary app and install your backup there. This way, you can test v15 without losing anything from your current setup.
Option 2 is to back up your data first and then directly upgrade from v14 to v15. This method skips the step of upgrading v14 separately.
bench switch-to-branch version-15 frappe erpnext
This command directly upgrades your ERPNext from v14 to v15 in the same bench after you’ve taken a backup. Just remember to run migrations afterward to apply any necessary changes to your database.
1 Like
i tried the option 1 and i get the error
OperationalError
pymysql.err.OperationalError: (1054, "Unknown column 'indicator_color' in 'field list'")
Traceback (most recent call last)
File "/home/manal/frappe-bench/apps/frappe/frappe/app.py", line 100, in application
init_request(request)
File "/home/manal/frappe-bench/apps/frappe/frappe/app.py", line 184, in init_request
raise frappe.SessionStopped("Session Stopped")
During handling of the above exception, another exception occurred:
File "/home/manal/frappe-bench/apps/frappe/frappe/website/serve.py", line 19, in get_response
endpoint, renderer_instance = path_resolver.resolve()
File "/home/manal/frappe-bench/apps/frappe/frappe/website/path_resolver.py", line 38, in resolve
resolve_redirect(self.path, request.query_string)
File "/home/manal/frappe-bench/apps/frappe/frappe/website/path_resolver.py", line 118, in resolve_redirect
redirects += frappe.get_all(
File "/home/manal/frappe-bench/apps/frappe/frappe/__init__.py", line 2034, in get_all
return get_list(doctype, *args, **kwargs)
File "/home/manal/frappe-bench/apps/frappe/frappe/__init__.py", line 2009, in get_list
return frappe.model.db_query.DatabaseQuery(doctype).execute(*args, **kwargs)
File "/home/manal/frappe-bench/apps/frappe/frappe/model/db_query.py", line 191, in execute
result = self.build_and_run()
File "/home/manal/frappe-bench/apps/frappe/frappe/model/db_query.py", line 232, in build_and_run
return frappe.db.sql(
File "/home/manal/frappe-bench/apps/frappe/frappe/database/database.py", line 230, in sql
self._cursor.execute(query, values)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/cursors.py", line 153, in execute
result = self._query(query)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/cursors.py", line 322, in _query
conn.query(q)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py", line 563, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py", line 825, in _read_query_result
result.read()
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py", line 1199, in read
first_packet = self.connection._read_packet()
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_packet
packet.raise_for_error()
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/protocol.py", line 219, in raise_for_error
err.raise_mysql_exception(self._data)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
raise errorclass(errno, errval)
During handling of the above exception, another exception occurred:
File "/home/manal/frappe-bench/apps/frappe/frappe/middlewares.py", line 16, in __call__
return super().__call__(environ, start_response)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/werkzeug/middleware/shared_data.py", line 250, in __call__
return self.app(environ, start_response)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/werkzeug/middleware/shared_data.py", line 250, in __call__
return self.app(environ, start_response)
File "/home/manal/frappe-bench/apps/frappe/frappe/app.py", line 80, in application
app(environ, start_response),
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/werkzeug/wrappers/request.py", line 190, in application
resp = f(*args[:-2] + (request,))
File "/home/manal/frappe-bench/apps/frappe/frappe/app.py", line 133, in application
response = handle_exception(e)
File "/home/manal/frappe-bench/apps/frappe/frappe/permissions.py", line 870, in wrapper
return fn(e, *args, **kwargs)
File "/home/manal/frappe-bench/apps/frappe/frappe/app.py", line 339, in handle_exception
response = frappe.utils.response.handle_session_stopped()
File "/home/manal/frappe-bench/apps/frappe/frappe/utils/response.py", line 327, in handle_session_stopped
return get_response("message", http_status_code=503)
File "/home/manal/frappe-bench/apps/frappe/frappe/website/serve.py", line 23, in get_response
return handle_exception(e, endpoint, path, http_status_code)
File "/home/manal/frappe-bench/apps/frappe/frappe/permissions.py", line 870, in wrapper
return fn(e, *args, **kwargs)
File "/home/manal/frappe-bench/apps/frappe/frappe/website/serve.py", line 37, in handle_exception
return ErrorPage(exception=e).render()
File "/home/manal/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py", line 84, in render
html = self.get_html()
File "/home/manal/frappe-bench/apps/frappe/frappe/website/utils.py", line 534, in cache_html_decorator
html = func(*args, **kwargs)
File "/home/manal/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py", line 92, in get_html
self.init_context()
File "/home/manal/frappe-bench/apps/frappe/frappe/website/page_renderers/error_page.py", line 14, in init_context
super().init_context()
File "/home/manal/frappe-bench/apps/frappe/frappe/website/page_renderers/base_template_page.py", line 15, in init_context
self.context.update(get_website_settings())
File "/home/manal/frappe-bench/apps/frappe/frappe/website/doctype/website_settings/website_settings.py", line 263, in get_website_settings
context.boot = get_boot_data()
File "/home/manal/frappe-bench/apps/frappe/frappe/website/utils.py", line 171, in get_boot_data
apps = get_apps() or []
File "/home/manal/frappe-bench/apps/frappe/frappe/utils/typing_validations.py", line 31, in wrapper
return func(*args, **kwargs)
File "/home/manal/frappe-bench/apps/frappe/frappe/apps.py", line 15, in get_apps
allowed_workspaces = get_workspace_sidebar_items().get("pages")
File "/home/manal/frappe-bench/apps/frappe/frappe/utils/typing_validations.py", line 31, in wrapper
return func(*args, **kwargs)
File "/home/manal/frappe-bench/apps/frappe/frappe/desk/desktop.py", line 451, in get_workspace_sidebar_items
all_pages = frappe.get_all(
File "/home/manal/frappe-bench/apps/frappe/frappe/__init__.py", line 2034, in get_all
return get_list(doctype, *args, **kwargs)
File "/home/manal/frappe-bench/apps/frappe/frappe/__init__.py", line 2009, in get_list
return frappe.model.db_query.DatabaseQuery(doctype).execute(*args, **kwargs)
File "/home/manal/frappe-bench/apps/frappe/frappe/model/db_query.py", line 191, in execute
result = self.build_and_run()
File "/home/manal/frappe-bench/apps/frappe/frappe/model/db_query.py", line 232, in build_and_run
return frappe.db.sql(
File "/home/manal/frappe-bench/apps/frappe/frappe/database/database.py", line 230, in sql
self._cursor.execute(query, values)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/cursors.py", line 153, in execute
result = self._query(query)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/cursors.py", line 322, in _query
conn.query(q)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py", line 563, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py", line 825, in _read_query_result
result.read()
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py", line 1199, in read
first_packet = self.connection._read_packet()
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_packet
packet.raise_for_error()
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/protocol.py", line 219, in raise_for_error
err.raise_mysql_exception(self._data)
File "/home/manal/frappe-bench/env/lib/python3.10/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1054, "Unknown column 'indicator_color' in 'field list'")
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. For code execution mouse-over the frame you want to debug and click on the console icon on the right side.
You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection:
dump() shows all variables in the frame
dump(obj) dumps all that's known about the object
Brought to you by DON'T PANIC, your friendly Werkzeug powered traceback interpreter.