Internal Server Error - issue when deploying erpnext in kubernetes

I have deployed erpnext following guidelines about deploying erpnext in Kubernetes, (‘frappe/erpnext:v15.11.0’)
all pods are running fine but when i browse the hostname which is the same as my site name I get Internal Server Error.
I have two volumes mounted in all pods
/home/frappe/frappe-bench/sites
/home/frappe/frappe-bench/logs

after looking at erpnext-gunicorn pod logs below is the error

[2024-02-06 08:18:32 +0000] [1] [INFO] Starting gunicorn 21.2.0
[2024-02-06 08:18:32 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
[2024-02-06 08:18:32 +0000] [1] [INFO] Using worker: gthread
[2024-02-06 08:18:32 +0000] [7] [INFO] Booting worker with pid: 7
[2024-02-06 08:18:33 +0000] [8] [INFO] Booting worker with pid: 8
[2024-02-06 08:18:42 +0000] [8] [ERROR] Error handling request /
Traceback (most recent call last):
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/serve.py”, line 18, in get_response
response = renderer_instance.render()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 84, in render
html = self.get_html()
^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/utils.py”, line 524, in cache_html_decorator
html = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 101, in get_html
html = self.render_template()
^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 238, in render_template
html = frappe.render_template(self.source, self.context, safe_render=safe_render)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja.py”, line 97, in render_template
return get_jenv().from_string(template).render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/environment.py”, line 1301, in render
self.environment.handle_exception()
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/environment.py”, line 936, in handle_exception
raise rewrite_traceback_stack(source=source)
File “”, line 61, in top-level template code
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/web.html”, line 1, in top-level template code
{% extends base_template_path %}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/base.html”, line 23, in top-level template code
{%- block head -%}
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/base.html”, line 24, in block ‘head’
{% include “templates/includes/head.html” %}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/includes/head.html”, line 9, in top-level template code
{{ include_style(‘website.bundle.css’) }}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/sandbox.py”, line 393, in call
return __context.call(__obj, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja_globals.py”, line 118, in include_style
path = bundled_asset(path)
^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja_globals.py”, line 136, in bundled_asset
path = bundled_assets.get(path) or path
^^^^^^^^^^^^^^^^^^
AttributeError: ‘NoneType’ object has no attribute ‘get’

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/home/frappe/frappe-bench/apps/frappe/frappe/app.py”, line 119, in application
response = get_response()
^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/serve.py”, line 26, in get_response
response = ErrorPage(exception=e).render()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 84, in render
html = self.get_html()
^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/utils.py”, line 524, in cache_html_decorator
html = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 101, in get_html
html = self.render_template()
^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 238, in render_template
html = frappe.render_template(self.source, self.context, safe_render=safe_render)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja.py”, line 97, in render_template
return get_jenv().from_string(template).render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/environment.py”, line 1301, in render
self.environment.handle_exception()
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/environment.py”, line 936, in handle_exception
raise rewrite_traceback_stack(source=source)
File “”, line 1, in top-level template code
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/web.html”, line 1, in top-level template code
{% extends base_template_path %}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/base.html”, line 23, in top-level template code
{%- block head -%}
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/base.html”, line 24, in block ‘head’
{% include “templates/includes/head.html” %}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/includes/head.html”, line 9, in top-level template code
{{ include_style(‘website.bundle.css’) }}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/sandbox.py”, line 393, in call
return __context.call(__obj, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja_globals.py”, line 118, in include_style
path = bundled_asset(path)
^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja_globals.py”, line 136, in bundled_asset
path = bundled_assets.get(path) or path
^^^^^^^^^^^^^^^^^^
AttributeError: ‘NoneType’ object has no attribute ‘get’

Volume must be RWX and allow symlink.

For CRI-O refer assets are not properly mounted when using CRI-O as container engine · Issue #181 · frappe/helm · GitHub

1 Like

I have tried the entrypoint script which creates the asset folder in site’s directory with symlink to frappe and erpnext public folders from the bench root directory. but i am still getting the same issue. I am using Openshift .

File “/home/frappe/frappe-bench/apps/frappe/frappe/website/serve.py”, line 18, in get_response
response = renderer_instance.render()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 84, in render
html = self.get_html()
^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/utils.py”, line 523, in cache_html_decorator
html = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 101, in get_html
html = self.render_template()
^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 236, in render_template
html = frappe.render_template(self.source, self.context, safe_render=safe_render)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja.py”, line 97, in render_template
return get_jenv().from_string(template).render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/environment.py”, line 1301, in render
self.environment.handle_exception()
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/environment.py”, line 936, in handle_exception
raise rewrite_traceback_stack(source=source)
File “”, line 61, in top-level template code
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/web.html”, line 1, in top-level template code
{% extends base_template_path %}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/base.html”, line 23, in top-level template code
{%- block head -%}
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/base.html”, line 24, in block ‘head’
{% include “templates/includes/head.html” %}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/includes/head.html”, line 9, in top-level template code
{{ include_style(‘website.bundle.css’) }}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/sandbox.py”, line 393, in call
return __context.call(__obj, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja_globals.py”, line 118, in include_style
path = bundled_asset(path)
^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja_globals.py”, line 136, in bundled_asset
path = bundled_assets.get(path) or path
^^^^^^^^^^^^^^^^^^
AttributeError: ‘NoneType’ object has no attribute ‘get’

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/home/frappe/frappe-bench/apps/frappe/frappe/app.py”, line 119, in application
response = get_response()
^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/serve.py”, line 26, in get_response
response = ErrorPage(exception=e).render()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 84, in render
html = self.get_html()
^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/utils.py”, line 523, in cache_html_decorator
html = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 101, in get_html
html = self.render_template()
^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/template_page.py”, line 236, in render_template
html = frappe.render_template(self.source, self.context, safe_render=safe_render)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja.py”, line 97, in render_template
return get_jenv().from_string(template).render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/environment.py”, line 1301, in render
self.environment.handle_exception()
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/environment.py”, line 936, in handle_exception
raise rewrite_traceback_stack(source=source)
File “”, line 1, in top-level template code
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/web.html”, line 1, in top-level template code
{% extends base_template_path %}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/base.html”, line 23, in top-level template code
{%- block head -%}
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/base.html”, line 24, in block ‘head’
{% include “templates/includes/head.html” %}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/templates/includes/head.html”, line 9, in top-level template code
{{ include_style(‘website.bundle.css’) }}
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/env/lib/python3.11/site-packages/jinja2/sandbox.py”, line 393, in call
return __context.call(__obj, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja_globals.py”, line 118, in include_style
path = bundled_asset(path)
^^^^^^^^^^^^^^^^^^^
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/jinja_globals.py”, line 136, in bundled_asset
path = bundled_assets.get(path) or path
^^^^^^^^^^^^^^^^^^
AttributeError: ‘NoneType’ object has no attribute ‘get’

No idea what is missing in your setup.

This compose is used for testing setup helm/tests/compose.yaml at main · frappe/helm · GitHub

Test script: helm/tests/script.sh at main · frappe/helm · GitHub

Triggered in this workflow: helm/.github/workflows/test_pull.yml at main · frappe/helm · GitHub

You can try to run them locally and understand.

1 Like