jcppkkk / redmine_mail_reminder

Plugin for Redmine to create different role based reminders for project(s)
53 stars 32 forks source link

uninitialized constant MailReminderMailer::SortCriteria during test #87

Open jameswangcnln78 opened 7 years ago

jameswangcnln78 commented 7 years ago

I got the following error when executing "sudo docker exec -it redmine-app bundle exec rake reminder:exec[test] RAILS_ENV=production --trace"

Project "配置管理" with query "test" is forced processing under [test] mode. rake aborted! uninitialized constant MailReminderMailer::SortCriteria /home/redmine/redmine/plugins/redmine_mail_reminder/app/models/mail_reminder_mailer.rb:34:in block in issues_reminder' /usr/lib/ruby/2.3.0/set.rb:306:ineach_key' /usr/lib/ruby/2.3.0/set.rb:306:in each' /home/redmine/redmine/plugins/redmine_mail_reminder/app/models/mail_reminder_mailer.rb:31:inissues_reminder' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/base.rb:198:in process_action' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/callbacks.rb:20:inblock in process_action' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:88:in __run_callbacks__' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:778:in_run_process_action_callbacks' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:81:in run_callbacks' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/callbacks.rb:19:inprocess_action' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/base.rb:137:in process' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionview-4.2.8/lib/action_view/rendering.rb:30:inprocess' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.8/lib/action_mailer/base.rb:596:in block in process' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications.rb:164:inblock in instrument' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/instrumenter.rb:20:in instrument' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications.rb:164:ininstrument' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.8/lib/action_mailer/base.rb:593:in process' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.8/lib/action_mailer/base.rb:584:ininitialize' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.8/lib/action_mailer/message_delivery.rb:25:in new' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.8/lib/action_mailer/message_delivery.rb:25:ingetobj' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.8/lib/action_mailer/message_delivery.rb:34:in message' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.8/lib/action_mailer/message_delivery.rb:85:indeliver_now' /home/redmine/redmine/config/initializers/10-patches.rb:163:in deliver' /home/redmine/redmine/plugins/redmine_mail_reminder/lib/tasks/reminder.rake:43:inblock (4 levels) in <top (required)>' /home/redmine/redmine/plugins/redmine_mail_reminder/lib/tasks/reminder.rake:42:in each' /home/redmine/redmine/plugins/redmine_mail_reminder/lib/tasks/reminder.rake:42:inblock (3 levels) in <top (required)>' /home/redmine/redmine/plugins/redmine_mail_reminder/app/models/mail_reminder_mailer.rb:23:in with_synched_deliveries' /home/redmine/redmine/plugins/redmine_mail_reminder/lib/tasks/reminder.rake:41:inblock (2 levels) in <top (required)>' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/task.rb:236:in block in execute' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/task.rb:231:ineach' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/task.rb:231:in execute' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/task.rb:175:inblock in invoke_with_call_chain' /usr/lib/ruby/2.3.0/monitor.rb:214:in mon_synchronize' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/task.rb:168:ininvoke_with_call_chain' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/task.rb:161:in invoke' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/application.rb:149:ininvoke_task' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/application.rb:106:in block (2 levels) in top_level' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/application.rb:106:ineach' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/application.rb:106:in block in top_level' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/application.rb:115:inrun_with_threads' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/application.rb:100:in top_level' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/application.rb:78:inblock in run' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/application.rb:165:in standard_exception_handling' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/lib/rake/application.rb:75:inrun' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/rake-10.1.1/bin/rake:33:in <top (required)>' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/bin/rake:22:inload' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/bin/rake:22:in `

' Tasks: TOP => reminder:exec

And checked the code find : def issues_reminder(user, queries_data) User.current = user @queries_data = [] queries_data.each do |project, query| query.project = project sort_init(query.sort_criteria.empty? ? [['id', 'desc']] : query.sort_criteria) @sort_criteria = SortCriteria.new @sort_criteria.available_criteria = query.sortable_columns @sort_criteria.criteria = @sort_default if @sort_criteria.empty? I think this “SortCriteria" is no MailReminders' since I found no SortCriteria definition in MailReminder. What cause this error?

jameswangcnln78 commented 7 years ago

I have found SortCriteria class has been moved out form SortHelper since 3.4.0. So I tried changed the code into @sort_criteria = Redmine::SortCriteria.new @sortable_columns = query.sortable_columns issues = query.issues(:include => [:assigned_to, :tracker, :priority, :category, :fixed_version], :order => sort_clause) And got below error:

rake aborted! Mysql2::Error: Not unique table/alias: 'enumerations': SELECT issues.id AS t0_r0, issues.tracker_id AS t0_r1, issues.project_id AS t0_r2, issues.subject AS t0_r3, issues.description AS t0_r4, issues.due_date AS t0_r5, issues.category_id AS t0_r6, issues.status_id AS t0_r7, issues.assigned_to_id AS t0_r8, issues.priority_id AS t0_r9, issues.fixed_version_id AS t0_r10, issues.author_id AS t0_r11, issues.lock_version AS t0_r12, issues.created_on AS t0_r13, issues.updated_on AS t0_r14, issues.start_date AS t0_r15, issues.done_ratio AS t0_r16, issues.estimated_hours AS t0_r17, issues.parent_id AS t0_r18, issues.root_id AS t0_r19, issues.lft AS t0_r20, issues.rgt AS t0_r21, issues.is_private AS t0_r22, issues.closed_on AS t0_r23, issue_statuses.id AS t1_r0, issue_statuses.name AS t1_r1, issue_statuses.is_closed AS t1_r2, issue_statuses.position AS t1_r3, issue_statuses.default_done_ratio AS t1_r4, projects.id AS t2_r0, projects.name AS t2_r1, projects.description AS t2_r2, projects.homepage AS t2_r3, projects.is_public AS t2_r4, projects.parent_id AS t2_r5, projects.created_on AS t2_r6, projects.updated_on AS t2_r7, projects.identifier AS t2_r8, projects.status AS t2_r9, projects.lft AS t2_r10, projects.rgt AS t2_r11, projects.inherit_members AS t2_r12, projects.default_version_id AS t2_r13, projects.default_assigned_to_id AS t2_r14, users.id AS t3_r0, users.login AS t3_r1, users.hashed_password AS t3_r2, users.firstname AS t3_r3, users.lastname AS t3_r4, users.admin AS t3_r5, users.status AS t3_r6, users.last_login_on AS t3_r7, users.language AS t3_r8, users.auth_source_id AS t3_r9, users.created_on AS t3_r10, users.updated_on AS t3_r11, users.type AS t3_r12, users.identity_url AS t3_r13, users.mail_notification AS t3_r14, users.salt AS t3_r15, users.must_change_passwd AS t3_r16, users.passwd_changed_on AS t3_r17, trackers.id AS t4_r0, trackers.name AS t4_r1, trackers.is_in_chlog AS t4_r2, trackers.position AS t4_r3, trackers.is_in_roadmap AS t4_r4, trackers.fields_bits AS t4_r5, trackers.default_status_id AS t4_r6, enumerations.id AS t5_r0, enumerations.name AS t5_r1, enumerations.position AS t5_r2, enumerations.is_default AS t5_r3, enumerations.type AS t5_r4, enumerations.active AS t5_r5, enumerations.project_id AS t5_r6, enumerations.parent_id AS t5_r7, enumerations.position_name AS t5_r8, issue_categories.id AS t6_r0, issue_categories.project_id AS t6_r1, issue_categories.name AS t6_r2, issue_categories.assigned_to_id AS t6_r3, versions.id AS t7_r0, versions.project_id AS t7_r1, versions.name AS t7_r2, versions.description AS t7_r3, versions.effective_date AS t7_r4, versions.created_on AS t7_r5, versions.updated_on AS t7_r6, versions.wiki_page_title AS t7_r7, versions.status AS t7_r8, versions.sharing AS t7_r9 FROM issues INNER JOIN projects ON projects.id = issues.project_id INNER JOIN issue_statuses ON issue_statuses.id = issues.status_id LEFT OUTER JOIN users ON users.id = issues.assigned_to_id LEFT OUTER JOIN trackers ON trackers.id = issues.tracker_id LEFT OUTER JOIN enumerations ON enumerations.id = issues.priority_id AND enumerations.type IN ('IssuePriority') LEFT OUTER JOIN issue_categories ON issue_categories.id = issues.category_id LEFT OUTER JOIN versions ON versions.id = issues.fixed_version_id LEFT OUTER JOIN enumerations ON enumerations.id = issues.priority_id WHERE (projects.status <> 9 AND EXISTS (SELECT 1 AS one FROM enabled_modules em WHERE em.project_id = projects.id AND em.name='issue_tracking')) AND ((issues.status_id IN (SELECT id FROM issue_statuses WHERE is_closed=0)) AND projects.lft >= 1 AND projects.rgt <= 4) ORDER BY enumerations.position DESC /home/redmine/redmine/app/models/issue_query.rb:306:in rescue in issues' /home/redmine/redmine/app/models/issue_query.rb:269:inissues' /home/redmine/redmine/plugins/redmine_mail_reminder/app/models/mail_reminder_mailer.rb:36:in block in issues_reminder' /usr/lib/ruby/2.3.0/set.rb:306:ineach_key' /usr/lib/ruby/2.3.0/set.rb:306:in each' /home/redmine/redmine/plugins/redmine_mail_reminder/app/models/mail_reminder_mailer.rb:31:inissues_reminder' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/base.rb:198:in process_action' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/callbacks.rb:20:inblock in process_action' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:88:in __run_callbacks__' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:778:in_run_process_action_callbacks' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:81:in run_callbacks' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/callbacks.rb:19:inprocess_action' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/base.rb:137:in process' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionview-4.2.8/lib/action_view/rendering.rb:30:inprocess' /home/redmine/redmine/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.8/lib/action_mailer/base.rb:596:in `block in process'

And I also googled someone reported same issue for redmine 3.4.2.

klewy commented 7 years ago

Hello, have you found a solution for this problem?

jameswangcnln78 commented 7 years ago

No. I think we have to wait.

seza2783 commented 6 years ago

I have the same problem. Redmine 3.4.2. I removed following code from /redmine_mail_reminder/app/models/mail_reminder_mailer.rb: @sort_criteria = SortCriteria.new @sort_criteria.available_criteria = query.sortable_columns @sort_criteria.criteria = @sort_default if @sort_criteria.empty? and changed code issues = query.issues(:include => [:assigned_to, :tracker, :priority, :category, :fixed_version], :order => sort_clause) to issues = query.issues(:include => [:assigned_to, :tracker, :priority, :category, :fixed_version]) Restart. It is working for me.

PS: I lost ordering. But it is not a big deal.

danaivehr commented 6 years ago

sezd2783, thanks for the idea!

I commented out all sorting and column setup at all, so now code looks like this:

    queries_data.each do |project, query|
      query.project = project
      issues = query.issues
      @queries_data << [project, query, issues] if issues.any?
    end

Works Ok as well as query sorting is preserved.

With column setup

      issues = query.issues(:include => [:assigned_to, :tracker, :priority, :category, :fixed_version])

i had an issue about doubling columns in SQL query