dgtlmoon / changedetection.io

The best and simplest free open source web page change detection, website watcher, restock monitor and notification service. Restock Monitor, change detection. Designed for simplicity - Simply monitor which websites had a text change for free. Free Open source web page change detection, Website defacement monitoring, Price change notification
https://changedetection.io
Apache License 2.0
18.89k stars 1.03k forks source link

Internal server error - 500 ( #2631

Closed blazgvajc closed 1 month ago

blazgvajc commented 1 month ago

Describe the bug Internal server error - 500 when I try to open changedetection from the browser.

Version Latest

To Reproduce

Steps to reproduce the behavior: 2024-09-14 16:30:10 [2024-09-14 14:30:10,153] ERROR in app: Exception on / [GET] 2024-09-14 16:30:10 Traceback (most recent call last): 2024-09-14 16:30:10 File "/usr/local/jinja2/environment.py", line 468, in getitem 2024-09-14 16:30:10 return obj[argument] 2024-09-14 16:30:10 ~~~^^^^^^^^^^ 2024-09-14 16:30:10 KeyError: 'last_changed' 2024-09-14 16:30:10 2024-09-14 16:30:10 During handling of the above exception, another exception occurred: 2024-09-14 16:30:10 2024-09-14 16:30:10 Traceback (most recent call last): 2024-09-14 16:30:10 File "/usr/local/flask/app.py", line 2190, in wsgi_app 2024-09-14 16:30:10 response = self.full_dispatch_request() 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/flask/app.py", line 1486, in full_dispatch_request 2024-09-14 16:30:10 rv = self.handle_user_exception(e) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/flask_restful/init.py", line 298, in error_router 2024-09-14 16:30:10 return original_handler(e) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/flask_cors/extension.py", line 194, in wrapped_function 2024-09-14 16:30:10 return cors_after_request(app.make_response(f(args, kwargs))) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/flask/app.py", line 1484, in full_dispatch_request 2024-09-14 16:30:10 rv = self.dispatch_request() 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/flask/app.py", line 1469, in dispatch_request 2024-09-14 16:30:10 return self.ensure_sync(self.view_functions[rule.endpoint])(view_args) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/app/changedetectionio/flask_app.py", line 231, in decorated_view 2024-09-14 16:30:10 return func(args, kwargs) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/app/changedetectionio/flask_app.py", line 490, in index 2024-09-14 16:30:10 output = render_template( 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/flask/templating.py", line 151, in render_template 2024-09-14 16:30:10 return _render(app, template, context) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/flask/templating.py", line 132, in _render 2024-09-14 16:30:10 rv = template.render(context) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/jinja2/environment.py", line 1304, in render 2024-09-14 16:30:10 self.environment.handle_exception() 2024-09-14 16:30:10 File "/usr/local/jinja2/environment.py", line 939, in handle_exception 2024-09-14 16:30:10 raise rewrite_traceback_stack(source=source) 2024-09-14 16:30:10 File "/app/changedetectionio/templates/watch-overview.html", line 1, in top-level template code 2024-09-14 16:30:10 {% extends 'base.html' %} 2024-09-14 16:30:10 File "/app/changedetectionio/templates/base.html", line 219, in top-level template code 2024-09-14 16:30:10 {% block content %}{% endblock %} 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/app/changedetectionio/templates/watch-overview.html", line 92, in block 'content' 2024-09-14 16:30:10 {% for watch in (watches|sort(attribute=sort_attribute, reverse=sort_order == 'asc'))|pagination_slice(skip=pagination.skip) %} 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/jinja2/filters.py", line 437, in do_sort 2024-09-14 16:30:10 return sorted(value, key=key_func, reverse=reverse) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/jinja2/filters.py", line 114, in attrgetter 2024-09-14 16:30:10 item_i = environment.getitem(item_i, part) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/usr/local/jinja2/environment.py", line 477, in getitem 2024-09-14 16:30:10 return getattr(obj, attr) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 File "/app/changedetectionio/model/Watch.py", line 153, in last_changed 2024-09-14 16:30:10 return int(self.__newest_history_key) 2024-09-14 16:30:10 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:10 ValueError: invalid literal for int() with base 10: '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0 2024-09-14 16:30:10 172.17.0.1 - - [14/Sep/2024 14:30:10] "GET / HTTP/1.1" 500 659 0.126202 2024-09-14 16:30:10 (1) accepted ('172.17.0.1', 50078) 2024-09-14 16:30:33 [2024-09-14 14:30:33,259] ERROR in app: Exception on / [GET] 2024-09-14 16:30:33 Traceback (most recent call last): 2024-09-14 16:30:33 File "/usr/local/jinja2/environment.py", line 468, in getitem 2024-09-14 16:30:33 return obj[argument] 2024-09-14 16:30:33 ~~~^^^^^^^^^^ 2024-09-14 16:30:33 KeyError: 'last_changed' 2024-09-14 16:30:33 2024-09-14 16:30:33 During handling of the above exception, another exception occurred: 2024-09-14 16:30:33 2024-09-14 16:30:33 Traceback (most recent call last): 2024-09-14 16:30:33 File "/usr/local/flask/app.py", line 2190, in wsgi_app 2024-09-14 16:30:33 response = self.full_dispatch_request() 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/flask/app.py", line 1486, in full_dispatch_request 2024-09-14 16:30:33 rv = self.handle_user_exception(e) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/flask_restful/init.py", line 298, in error_router 2024-09-14 16:30:33 return original_handler(e) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/flask_cors/extension.py", line 194, in wrapped_function 2024-09-14 16:30:33 return cors_after_request(app.make_response(f(args, kwargs))) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/flask/app.py", line 1484, in full_dispatch_request 2024-09-14 16:30:33 rv = self.dispatch_request() 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/flask/app.py", line 1469, in dispatch_request 2024-09-14 16:30:33 return self.ensure_sync(self.view_functions[rule.endpoint])(view_args) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/app/changedetectionio/flask_app.py", line 231, in decorated_view 2024-09-14 16:30:33 return func(args, kwargs) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/app/changedetectionio/flask_app.py", line 490, in index 2024-09-14 16:30:33 output = render_template( 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/flask/templating.py", line 151, in render_template 2024-09-14 16:30:33 return _render(app, template, context) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/flask/templating.py", line 132, in _render 2024-09-14 16:30:33 rv = template.render(context) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/jinja2/environment.py", line 1304, in render 2024-09-14 16:30:33 self.environment.handle_exception() 2024-09-14 16:30:33 File "/usr/local/jinja2/environment.py", line 939, in handle_exception 2024-09-14 16:30:33 raise rewrite_traceback_stack(source=source) 2024-09-14 16:30:33 File "/app/changedetectionio/templates/watch-overview.html", line 1, in top-level template code 2024-09-14 16:30:33 {% extends 'base.html' %} 2024-09-14 16:30:33 File "/app/changedetectionio/templates/base.html", line 219, in top-level template code 2024-09-14 16:30:33 {% block content %}{% endblock %} 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/app/changedetectionio/templates/watch-overview.html", line 92, in block 'content' 2024-09-14 16:30:33 {% for watch in (watches|sort(attribute=sort_attribute, reverse=sort_order == 'asc'))|pagination_slice(skip=pagination.skip) %} 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/jinja2/filters.py", line 437, in do_sort 2024-09-14 16:30:33 return sorted(value, key=key_func, reverse=reverse) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/jinja2/filters.py", line 114, in attrgetter 2024-09-14 16:30:33 item_i = environment.getitem(item_i, part) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/usr/local/jinja2/environment.py", line 477, in getitem 2024-09-14 16:30:33 return getattr(obj, attr) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 File "/app/changedetectionio/model/Watch.py", line 153, in last_changed 2024-09-14 16:30:33 return int(self.__newest_history_key) 2024-09-14 16:30:33 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2024-09-14 16:30:33 ValueError: invalid literal for int() with base 10: '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0

! ALWAYS INCLUDE AN EXAMPLE URL WHERE IT IS POSSIBLE TO RE-CREATE THE ISSUE - USE THE 'SHARE WATCH' FEATURE AND PASTE IN THE SHARE-LINK!

Expected behavior Load the change detection.

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

Additional context I have been using change detection for at least a year with mounted volume, which was working until now. If I run the latest version with a fresh/new volume then everything works as it should, so it seems the volume which I have been using for a long time is somehow corrupted. I can attach the volume if needed. I haven't edited volume manually. It is important to mention that the watcher still works and I get Discord notifications.

dgtlmoon commented 1 month ago

yeah so something in your machine must have crashed

shut it down, then just mount the volume only and go edit the url-watches.json file, you will see a big string/space of empty chars, just edit those out

then restart

ta7tUHIJHx4RwR21 commented 3 days ago

yeah so something in your machine must have crashed

shut it down, then just mount the volume only and go edit the url-watches.json file, you will see a big string/space of empty chars, just edit those out

then restart

Any easy way to find the empty string? I have 24,000 lines in my json file. I try searching for spaces but have had no luck. Thank you.