You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:17:59