Drupal 过期角色和发送提醒电子邮件的规则计划程序同时启动
我有3条规则组成我的“会员资格”Drupal 过期角色和发送提醒电子邮件的规则计划程序同时启动,drupal,drupal-7,drupal-rules,Drupal,Drupal 7,Drupal Rules,我有3条规则组成我的“会员资格” 购买产品X时分配角色(此项有效!) 2分钟后发送提醒电子邮件 4分钟后删除角色 请注意,2分钟和4分钟仅用于测试目的,它们将分别变为350天和365天 而两者都是2。或3。在工作中,我有两个问题: 规则n2和n3同时启动,因此在2分钟时,不仅会发送电子邮件,还会删除角色 假设用户MARK购买了产品X,一分钟后,JOE也这样做了。MARK购买产品X 2分钟后,MARK收到提醒电子邮件,他的角色被删除,但JOE也收到提醒电子邮件,他的角色被删除 似乎只要有什么东
- 规则n2和n3同时启动,因此在2分钟时,不仅会发送电子邮件,还会删除角色
- 假设用户MARK购买了产品X,一分钟后,JOE也这样做了。MARK购买产品X 2分钟后,MARK收到提醒电子邮件,他的角色被删除,但JOE也收到提醒电子邮件,他的角色被删除
{ "rules_sends_email_to_pipps_reminder_1_week_prior_expiry" : {
"LABEL" : "Sends Email to PIPPS Reminder 1 week prior expiry",
"PLUGIN" : "rule set",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : { "user_argument" : { "label" : "User {argument}", "type" : "user" } },
"RULES" : [
{ "RULE" : {
"DO" : [
{ "mail" : {
"to" : "[commerce-order:mail]",
"subject" : "Heads up!",
"message" : "Yo! Heads up!",
"from" : "pipps@siteemail.com",
"language" : [ "site:current-cart-order:state" ]
}
}
],
"LABEL" : "Send email reminder to PIPPS"
}
}
]
{ "rules_expire_pipps_role_rule_set_" : {
"LABEL" : "Expire PIPPS Role {rule_set}",
"PLUGIN" : "rule set",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : { "user_argument" : { "label" : "User {argument}", "type" : "user" } },
"RULES" : [
{ "RULE" : {
"DO" : [
{ "user_remove_role" : {
"account" : [ "user_argument" ],
"roles" : { "value" : { "13" : "13" } }
}
}
],
"LABEL" : "Expire action {rule}"
}
}
]
}
}
规则“发送提醒”触发器:
}
}
规则“角色过期”组件:
{ "rules_sends_email_to_pipps_reminder_1_week_prior_expiry" : {
"LABEL" : "Sends Email to PIPPS Reminder 1 week prior expiry",
"PLUGIN" : "rule set",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : { "user_argument" : { "label" : "User {argument}", "type" : "user" } },
"RULES" : [
{ "RULE" : {
"DO" : [
{ "mail" : {
"to" : "[commerce-order:mail]",
"subject" : "Heads up!",
"message" : "Yo! Heads up!",
"from" : "pipps@siteemail.com",
"language" : [ "site:current-cart-order:state" ]
}
}
],
"LABEL" : "Send email reminder to PIPPS"
}
}
]
{ "rules_expire_pipps_role_rule_set_" : {
"LABEL" : "Expire PIPPS Role {rule_set}",
"PLUGIN" : "rule set",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : { "user_argument" : { "label" : "User {argument}", "type" : "user" } },
"RULES" : [
{ "RULE" : {
"DO" : [
{ "user_remove_role" : {
"account" : [ "user_argument" ],
"roles" : { "value" : { "13" : "13" } }
}
}
],
"LABEL" : "Expire action {rule}"
}
}
]
}
}
规则“过期角色”触发器:
}
}
非常感谢您的任何建议!谢谢。您的规则(和规则组件)似乎“按实现方式工作”。。。你的“问题”似乎是,在测试过程中,你应该更有耐心。。。请继续阅读以了解更多详细信息
了解正在发生的事情
在调度规则(使用规则调度器子模块)后,它将仅在下次cron运行时实际执行
例如:
- 安排第一个规则组件在时间戳X1执行
- 如果cron的下一次运行时间是在时间戳X1之后的
之后的Y分钟,则此第一个规则组件的执行将仅在那时(=在时间戳X1
Y分钟)发生
- 安排第二个规则组件在时间戳X2执行
- 如果cron的下一次运行时间是在时间戳X2之后的
之后的Y分钟,则此第二个规则组件的执行将只在那时(=在时间戳X2
Y分钟)发生
时间戳X2
发生在时间戳X1之后Y分钟之前。这也解释了为什么两个规则组件实际上同时执行(或多或少)
补救措施,让它发挥你真正想要的作用
假设您的cron作业每小时运行一次,那么在4分钟之后计划的规则组件的直接(次要)修复将改为在2小时之后计划它们。因此,您可以确保两个规则组件在同一个cron作业期间没有实际执行。请记住,cron运行时规则调度器正在调用。当您调用cron工作时,所有未调用的调度程序都应该被调用。Hi@lamp5感谢您的建议。我的理解是,当我有一个日期偏移量(就像我在那些触发器上做的那样)时,cron检查是否满足该日期偏移量,然后触发这些规则。那么你是说,不管日期偏移值是多少,它都会被调用?谢谢