Access to Redmine infrastructure from inside a plugin
Added by Denis Adamchik over 5 years ago
Currently I am working on a plugin to provide some scheduled activity. For that I use the 'sidekiq-scheduler' gem and redis server. I have two classes: a simple one, which provides a perform method of the Sidekiq::Worker module
require 'sidekiq-scheduler'
require_relative '../../lib/issue_status_master'
class IssueStatusWorker
include Sidekiq::Worker
def perform
IssueStatusMaster.update!
end
end
and another one, which implements the business logic
class IssueStatusMaster
include Redmine::I18n
def self.update!
# Some business logic, involving Redmine model classes
end
end
The location of the first file is 'app/workers/issue_status_worker.rb', while that of the second is 'lib/issue_status_master.rb'.
When I run sidekiq from the redmine root:
'sidekiq -r ./plugins/issue_master/app/workers/issue_status_worker.rb' -C /plugins/issue_master/config/sidekiq.yml I get an error: 'uninitialized constant IssueStatusMaster::Redmine'.
When I tried to send to the class the required Redmine module during the initialization instead of directly including it within the class declaration
ActionDispatch::Callbacks.to_prepare do
IssueStatusMaster.send(:include, Redmine::I18n)
end
I was able to use its methods but I still had no access to Redmine model classes.
As far as I can get migration of the plugin does not automatically give such an access. What should I do to fix the problem?
In addition, I have a rake task in 'lib/tasks' directory, which calls the 'update' method of the IssueStatusMaster class and the transaction goes flawlessly.