xmera-circle / redmine_workload

[Fork] Calculate user workload over time
6 stars 3 forks source link

[Redmine 5.0.x]: LoadError: cannot load such file -- redmine_workload #5

Closed mboremski closed 1 year ago

mboremski commented 2 years ago

Installing this plugin in redmine 5.0 leads to LoadError: cannot load such file -- redmine_workload

Enviroment

Environment:
  Redmine version                5.0.1.stable.21623
  Ruby version                   3.0.0-p0 (2020-12-25) [x86_64-linux]
  Rails version                  6.1.6
  Environment                    production
  Database adapter               Mysql2
  Mailer queue                   ActiveJob::QueueAdapters::AsyncAdapter
  Mailer delivery                smtp
Redmine settings:
  Redmine theme                  Purplemine2 (includes JavaScript)
SCM:
  Subversion                     1.10.4
  Git                            2.20.1
  Filesystem                     
Redmine plugins:
  no plugin installed

Full cmd-log

run bundle exec rake redmine:plugins:migrate RAILS_ENV=production leads to

rake aborted!
LoadError: cannot load such file -- redmine_workload
/usr/local/rvm/gems/ruby-3.0.0/gems/zeitwerk-2.5.4/lib/zeitwerk/kernel.rb:35:in `require'
/usr/local/rvm/gems/ruby-3.0.0/gems/zeitwerk-2.5.4/lib/zeitwerk/kernel.rb:35:in `require'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/dependencies/zeitwerk_integration.rb:51:in `require_dependency'
/opt/redmine-5.0/plugins/redmine_workload/init.rb:4:in `<top (required)>'
/opt/redmine-5.0/lib/redmine/plugin_loader.rb:31:in `load'
/opt/redmine-5.0/lib/redmine/plugin_loader.rb:31:in `run_initializer'
/opt/redmine-5.0/lib/redmine/plugin_loader.rb:108:in `each'
/opt/redmine-5.0/lib/redmine/plugin_loader.rb:108:in `block in load'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:427:in `instance_exec'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:427:in `block in make_lambda'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:198:in `block (2 levels) in halting'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:604:in `block (2 levels) in default_terminator'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:603:in `catch'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:603:in `block in default_terminator'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:199:in `block in halting'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:512:in `block in invoke_before'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:512:in `each'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:512:in `invoke_before'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:105:in `run_callbacks'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/reloader.rb:88:in `prepare!'
/usr/local/rvm/gems/ruby-3.0.0/gems/railties-6.1.6/lib/rails/application/finisher.rb:124:in `block in <module:Finisher>'
/usr/local/rvm/gems/ruby-3.0.0/gems/railties-6.1.6/lib/rails/initializable.rb:32:in `instance_exec'
/usr/local/rvm/gems/ruby-3.0.0/gems/railties-6.1.6/lib/rails/initializable.rb:32:in `run'
/usr/local/rvm/gems/ruby-3.0.0/gems/railties-6.1.6/lib/rails/initializable.rb:61:in `block in run_initializers'
/usr/local/rvm/gems/ruby-3.0.0/gems/railties-6.1.6/lib/rails/initializable.rb:60:in `run_initializers'
/usr/local/rvm/gems/ruby-3.0.0/gems/railties-6.1.6/lib/rails/application.rb:391:in `initialize!'
/opt/redmine-5.0/config/environment.rb:16:in `<top (required)>'
/usr/local/rvm/gems/ruby-3.0.0/gems/zeitwerk-2.5.4/lib/zeitwerk/kernel.rb:35:in `require'
/usr/local/rvm/gems/ruby-3.0.0/gems/zeitwerk-2.5.4/lib/zeitwerk/kernel.rb:35:in `require'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/dependencies.rb:332:in `block in require'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/dependencies.rb:299:in `load_dependency'
/usr/local/rvm/gems/ruby-3.0.0/gems/activesupport-6.1.6/lib/active_support/dependencies.rb:332:in `require'
/usr/local/rvm/gems/ruby-3.0.0/gems/railties-6.1.6/lib/rails/application.rb:367:in `require_environment!'
/usr/local/rvm/gems/ruby-3.0.0/gems/railties-6.1.6/lib/rails/application.rb:533:in `block in run_tasks_blocks'
/usr/local/rvm/gems/ruby-3.0.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/rvm/gems/ruby-3.0.0/bin/ruby_executable_hooks:22:in `eval'
/usr/local/rvm/gems/ruby-3.0.0/bin/ruby_executable_hooks:22:in `<main>'
Tasks: TOP => redmine:plugins:migrate => environment
(See full trace by running task with --trace)
mboremski commented 2 years ago

Hint from @liaham -> Zeitwerk changed some things on loading files. So I tried some changes

init.rb

- require_dependency 'redmine_workload'
+ require File.dirname(__FILE__) + '/lib/redmine_workload'

lib/redmine_workload.rb

- require 'redmine_workload/extensions/user_patch'
- require 'redmine_workload/group_workload_preparer'
- require 'redmine_workload/user_workload_preparer'
- require 'redmine_workload/wl_csv_exporter'
- require 'redmine_workload/wl_date_tools'
- require 'redmine_workload/wl_issue_query'
- require 'redmine_workload/wl_user_data_finder'
- require 'redmine_workload/wl_user_data_defaults'
+ require File.dirname(__FILE__) + '/redmine_workload/extensions/user_patch'
+ require File.dirname(__FILE__) + '/redmine_workload/group_workload_preparer'
+ require File.dirname(__FILE__) + '/redmine_workload/user_workload_preparer'
+ require File.dirname(__FILE__) + '/redmine_workload/wl_csv_exporter'
+ require File.dirname(__FILE__) + '/redmine_workload/wl_date_tools'
+ require File.dirname(__FILE__) + '/redmine_workload/wl_issue_query'
+ require File.dirname(__FILE__) + '/redmine_workload/wl_user_data_finder'
+ require File.dirname(__FILE__) + '/redmine_workload/wl_user_data_defaults'

They now lead too:

Zeitwerk::NameError: expected file /opt/redmine-5.0/plugins/redmine_workload/lib/redmine_workload/group_workload_preparer.rb to define constant RedmineWorkload::GroupWorkloadPreparer, but didn't
liaham commented 2 years ago

You need also wrap all classes and modules in lib/redmine_workload/ with a 'namespace' - module named RedmineWorkload if not already done.

Calling the respective modules and classes throughout the code needs also to be adjusted by using RedmineWorkload::<class_or_module_name_here>.

Please make sure that all tests run as expected and rubocop won't complain offences.

Astral-ator commented 1 year ago

Hello @liaham , can you be more specific on "calling respective classes & modules " in code ? being a non ruby person , i having a hard time what to "look & replace " in the code. Is there any progress on making this fine plugin RM5.x ready ?

liaham commented 1 year ago

Hi @Astral-ator ,

Let's assume you have the following module in your Redmine Plugin lib directory:

# lib/my_plugin/my_utility_module.rb
module MyUtilityModule
  def self.my_utility_method
    # your code here
  end
end

When you called the method in Redmine 4 like this: MyUtilityModule.my_utility_method and you have wrapped the module for Redmine 5 into a namespace corresponding to the file path like so:

# lib/my_plugin/my_utility_module.rb
module MyPlugin
  module MyUtilityModule
    def self.my_utility_method
      # your code here
    end
  end
end

then you need to use the module in Redmine 5 this way: MyPlugin::MyUtilityModule.my_utility_method.

That is what I tried to explain above.

Hope it helps. :)

Best Regards, liaham

mboremski commented 1 year ago

Is there any progress on making this fine plugin RM5.x ready ?

We had some time to test a newer version that is ready for redmine5.x Will Realease it soon. Maybe already this week.