Installation plugins to Redmine 5.0.0 get problem "... /zeitwerk/kernel.rb:35:in `require': cannot load such file.."

Added by HC lee 3 months ago

Installation plugins to Redmine 5.0.0 to get "Failed" as the following list:

redmine_questions 1.0.2 Failed
redmineup_tags 2.0.11 Failed
redmine_agile 1.6.3 Done (1.6.2 Failed)
redmine_dmsf 2.4.11 Failed
redmine_resources 1.0.6 Failed
redmine_drawio 1.3.0 Failed
redmine_subproject_collapse 0.0.1 Failed
advanced_roadmap 0.12.0 Failed
local_avatars 0.1.1 Failed

common messages as below:

.....

1: from /var/lib/gems/2.7.0/gems/zeitwerk-2.5.4/lib/zeitwerk/kernel.rb:35:in `require'
/var/lib/gems/2.7.0/gems/zeitwerk-2.5.4/lib/zeitwerk/kernel.rb:35:in `require': cannot load such file -- dispatcher (LoadError)

......

Attached log for details: Redmine-InstallPluginsError_5.0.0.txt

Environment:
Redmine version 5.0.0.stable
Ruby version 2.7.0-p0 (2019-12-25) [x86_64-linux-gnu]
Rails version 6.1.4.7
Environment production
Database adapter Mysql2
Mailer queue ActiveJob::QueueAdapters::AsyncAdapter
Mailer delivery smtp
Redmine settings:
Redmine theme Default
SCM:
Git 2.25.1
Filesystem

Thank you.

Replies (7)

RE: Installation plugins to Redmine 5.0.0 get problem "... /zeitwerk/kernel.rb:35:in `require': cannot load such file.." - Added by Renaud GOSSE 3 months ago

Hello
this is linked to the redmine up plugins.

Please see support with them. I was able to make a redmine 5 test with only the agile plugin from their store, I had to deactivate the others (they're working on updates).

RE: Installation plugins to Redmine 5.0.0 get problem "... /zeitwerk/kernel.rb:35:in `require': cannot load such file.." - Added by Vitaliy Vasilev 2 months ago

Take a look at "/issues/36519" (for some reason direct link cause redmine Internal Error).

I could fix same problem by replacing require with manually created path.

# old
require 'module'

# new one
require File.expand_path('../lib/module', FILE)

Not a pretty solution, but working!

RE: Installation plugins to Redmine 5.0.0 get problem "... /zeitwerk/kernel.rb:35:in `require': cannot load such file.." - Added by fabrice salvaire 2 months ago

I have a similar issue with another plugin, but I got this with your change :

! Unable to load application: NameError: uninitialized constant FILE
Did you mean?  File
.../redmine-5.0.0/plugins/redmine_wiki_backlinks/init.rb:3:in `<top (required)>': uninitialized constant FILE (NameError)

Looks like some symbols are undefined.

Note: I am not a Ruby dev.

RE: Installation plugins to Redmine 5.0.0 get problem "... /zeitwerk/kernel.rb:35:in `require': cannot load such file.." - Added by Fletcher Johnston about 1 month ago

The change has to be made in the init.rb file for the plugin.
Note that the markup is `__FILE__` (remove ticks; otherwise markdup picks them up)

RE: Installation plugins to Redmine 5.0.0 get problem "... /zeitwerk/kernel.rb:35:in `require': cannot load such file.." - Added by Fletcher Johnston about 1 month ago

A bit more detail here. I pulled the first two examples from the redmine_wysiwyg_editor plugin's GIT repo.
It seems that a lot of plugins used to do something like this:

require_dependency 'redmine_wysiwyg_editor'

However, because of the change to Rails 6 (I think) you now need to do something like this:

require File.expand_path('lib/redmine_wysiwyg_editor', __dir__)

OR

require File.dirname(__FILE__) + '/lib/issues_controller_patch.rb'

I have also found that the switch to zeitwerk has broken many plugins, and even after making the above changes in the init.rb file, other changes are necessary within the plugin modules and classes.

Lots of work re-writing/updating plugins in the next little while...

RE: Installation plugins to Redmine 5.0.0 get problem "... /zeitwerk/kernel.rb:35:in `require': cannot load such file.." - Added by Oded Arbel 18 days ago

I'm also having this issue after upgrade to Redmine 5.

As far as I understand, this code in plugin_loader.rb (https://github.com/redmine/redmine/blob/master/lib/redmine/plugin_loader.rb#L128) is supposed to caused the plugin's lib directory to be added to the load path, but this does not seem to work anymore.

The workaround for all plugin authors to manually update the Ruby global load path doesn't seem untenable - I have > 20 plugins installed in my Redmine, for which I have an auto update system, and getting all other authors (some haven't touched that plugin's source code in years) is going to be a problem.

My current workaround is to add

$:.unshift "#{engine_cfg.paths.path}/lib"

in line 128 of plugin_loader.rb, but this is also an ugly hack.

(1-7/7)