Redmine场景下如何向Ruby Rufus Scheduler传递关键字参数?
在Rufus Scheduler中给Redmine邮件接收任务传递参数的正确方式
我之前配置Redmine邮件接收时也踩过环境变量的坑——全局变量确实会影响其他功能,后来摸索出了直接通过Rake任务传递参数的方法,完美解决了这个问题,给你详细说下:
核心思路
Redmine自带的redmine:email:receive_imap(或redmine:email:receive_pop3,看你用的协议)Rake任务本身支持直接传入参数,不需要依赖环境变量。我们可以在Rufus Scheduler的调度逻辑里,直接调用这个任务并传递所需的参数。
具体代码示例
require 'rufus-scheduler' require 'rake' # 先加载Redmine的Rake任务环境,不然找不到对应的邮件接收任务 RedmineApp::Application.load_tasks scheduler = Rufus::Scheduler.new # 这里设置每5分钟执行一次,你可以根据需求调整时间间隔 scheduler.every '5m' do # 调用邮件接收任务,直接传入参数 Rake::Task['redmine:email:receive_imap'].invoke( project: 'your-project-slug', # 替换成你的项目标识符(不是名称,是设置里的Identifier字段) tracker: 'Bug', # 替换成你要指定的跟踪器名称,比如'Feature' allow_override: 'project,tracker' # 允许邮件内容覆盖这些参数,按需设置 ) # 关键:每次调用invoke后,Rake任务会被标记为已执行,必须reenable才能下次触发 Rake::Task['redmine:email:receive_imap'].reenable end
参数说明
- project:填写项目的标识符(不是项目名称,是项目设置里的
Identifier字段,一般是小写短横线分隔的字符串) - tracker:填写系统中已存在的跟踪器名称,比如
Bug、Feature,要和后台配置的完全一致 - allow_override:可选参数,设置哪些参数允许被邮件内容覆盖,比如设置
project,tracker后,邮件正文中如果有Project: 新项目这样的标记,就会替换掉你传入的project参数
为什么这种方式更好?
用环境变量传递参数时,变量是全局生效的,Redmine的Web服务进程也会读取到这些值,可能导致其他页面或功能出现异常。而直接给Rake任务传参数是局部生效的,只有当前调度的邮件接收任务会使用这些参数,完全不会影响其他功能。
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

