Open wolflu05 opened 2 months ago
@luwol03 a few different things to address here!
Good idea to break it into different issues:
EDIT: I have added this list to the initial comment now
I think the migration part of 2 and 5 should be split out as individual issues as they do not seem connected with static content "stuff".
I agree with point 5, but when looking deeper, issue 2 targets exactly the code added in the static files for plugins pr. It works in dev, but not, (reproducable) in a fresh docker prod setup. And I think if the static file not being collected automatically issue is solved, the task that is offloaded to run the migrations will be fixed too.
Can you reproduce that too in a fresh docker prod setup?
@wolflu05 I think this has been addressed now, please let me know if this is incorrect...
Only 1 and 4 have been fixed be me in one of my recent prs. 2,3 and 5 have been still not fixed from here: https://github.com/inventree/InvenTree/issues/7709#issuecomment-2244844925
@wolflu05 good point. If you have some time to look into those? Otherwise I will try to get to it when I can :)
Sorry, but unfortunately I won't have any time the next weeks.
Is this issue still happening?
Is this issue still happening?
Yes, I have updated the initial comment now with the list where I have broken down the issue into smaller ones (previously this was only a comment in this discussion, so that this doesn't get lost). Issue 2 and 3 are still not solved. And issue 5 is not reproducible. I have tested with the current latest docker image (updated the version information accordingly).
I have tested again with ec2051d, and 2,3 and 5 is still not resolved, so I'm reopening it.
Now removing the files after disabling the plugin is implemented (3), but the same error as (2) occurs when running without a restart. And I can actually reproduce 5 now again, that's a very strange one.
@wolflu05 OK, let's work it out!
Please verify that this bug has NOT been raised before.
Describe the bug*
I have broken down the issues with plugin static files into multiple smaller ones:
1. Static files path(fixed with #7763)Details
If an `AppMixin` plugin before had a `static` folder and the django app was loaded, `invoke static` had already collected the static files in the root of the static folder so a file in `my-plugin/static/panel.js` was served by `/static/panel.js`. *(to remove clashes between files with the same name from multiple plugins, I placed my static files in `my-plugin/static/my-plugin/panel.js`, so it was served by `/static/my-plugin/panel.js`)* Now after the mentioned PR, a file in `my-plugin/static/panel.js` is served by `/static/plugins/my-plugin/panel.js`. I do not think this change is bad, it just needs to be documented as breaking. One good think would be to provide a `{% plugin_static "panel.js" %}` template tag which resolves to the particular plugin static url (`/static/plugins/my-plugin/panel.js`) and we back port that to 0.15 which resolves to `/static/panel.js`
2. Automatic static file copying and migrations are not run after activating a plugin
I can reproduce this in a fresh docker setup (but not in my dev setup running locally). But no idea why only in a production docker setup. (Sometimes only very few times it actually succeeds, but then the migrations are run two times, the first time without any error, and the second they error out, because obviously the table already exists, that the migrations should create). Maybe that's some type of race condition.
inventree-bulk-plugin
(orinventree-kicad
, but that only tests with migrations)inventree-worker | Plugin registry has no record of plugin 'inventree-bulk-plugin'
static/plugins/inventree-bulk-plugin
does not exist (folder should exist)invoke update
the files now exists and the migrations have run3. When deactivating a plugin, the the static files don't get removed
When deactivating a plugin, the static files get don't removed automatically, a
invoke static
is needed. And even then, nested folders remain.4. AppMixin Plugins with static files causes an error(fixed with #7763)Details
(If 2 is solved, found with my local dev setup where I don't have the issue 2, or when running `invoke static`) 1. Install a plugin with the app mixin that provides static files like in (2.1 and 2.2) 2. Activate the plugin 3. See the following error: ``` Process-c8d4a6053e4d446fb9f81077681a7693 processing blue-snake-xray-beryllium 'plugin.staticfiles.copy_plugin_static_files' Copying static files for plugin 'inventree-bulk-plugin' Failed 'plugin.staticfiles.copy_plugin_static_files' (blue-snake-xray-beryllium) - [Errno 66] Directory not empty: '/Users/wolflu/Development/1_GITHUB/InvenTree/dev/static/inventree-bulk-plugin' : Traceback (most recent call last): File "/Users/wolflu/Development/1_GITHUB/InvenTree/dev/venv/lib/python3.11/site-packages/django_q/worker.py", line 97, in worker res = f(*task["args"], **task["kwargs"]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/wolflu/Development/1_GITHUB/InvenTree/src/backend/InvenTree/plugin/staticfiles.py", line 66, in copy_plugin_static_files clear_static_dir(destination_prefix) File "/Users/wolflu/Development/1_GITHUB/InvenTree/src/backend/InvenTree/plugin/staticfiles.py", line 31, in clear_static_dir staticfiles_storage.delete(d) File "/Users/wolflu/Development/1_GITHUB/InvenTree/dev/venv/lib/python3.11/site-packages/django/core/files/storage/filesystem.py", line 156, in delete os.rmdir(name) OSError: [Errno 66] Directory not empty: '/Users/wolflu/Development/1_GITHUB/InvenTree/dev/static/inventree-bulk-plugin' ```
5. Property bug (can only sometimes reproduce)
When freshly installing a plugin (freshly, not previously installed), and then activating the plugin without restarting the server it can happen that it looks like this:
Error
``` Traceback (most recent call last): File "/root/.local/lib/python3.11/site-packages/rest_framework/views.py", line 506, in dispatch response = handler(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/inventree/src/backend/InvenTree/plugin/api.py", line 341, in get settings_definition=settings, plugin=plugin.plugin_config() ^^^^^^^^^^^^^^^^^^^^^^ TypeError: MetaBase.plugin_config() missing 1 required positional argument: 'self' ```
Deployment Method
Version Information
Please verify if you can reproduce this bug on the demo site.
Relevant log output
No response