运行自定义Rake任务zendesk:update_zendesk_rake提示找不到任务求助
Rake任务无法识别问题排查方案
1. 文件后缀不规范
Rake任务的识别要求文件后缀必须为.rake,你当前的文件名为update_zendesk_rake.rb,使用了普通Ruby文件的.rb后缀,不会被Rails判定为Rake任务文件。需要将文件重命名为update_zendesk_rake.rake。
2. 文件路径不在默认加载范围
Rails默认只会自动扫描加载lib/tasks/目录下的所有.rake文件,你当前把任务文件放在app/_modules/ccenter/rake/路径下,不在默认扫描列表中,因此无法被识别。有两种解决方案可选:
- 方案一:将改完后缀的任务文件移动到
lib/tasks/目录(可根据分类需求创建lib/tasks/zendesk/子目录存放),Rails启动或执行Rake命令时会自动加载该目录下的所有任务。 - 方案二:如果必须保留现有存放路径,需要在项目根目录的
Rakefile中添加自定义路径扫描规则,代码如下:
# 放在Rakefile的末尾即可 Dir.glob(Rails.root.join('app/_modules/ccenter/rake/**/*.rake')).each do |task_file| load task_file end
3. 可选代码优化
你当前任务代码中哈希定义的末尾多了一个冗余逗号,虽然新版Ruby支持尾随逗号不会触发报错,但可以删掉避免低版本兼容问题:
namespace :zendesk do desc 'update status group values' task update_zendesk_rake: :environment do the_map = { "yssse_ra"=>"legal", "active"=>"active", "after"=>"legal" } the_map.each { |k,v| CaseFileStatus.where(state: k).update_all(zendesk_status_group: v) } end end
验证方式
修改完成后执行命令rake --tasks | grep zendesk,如果输出如下内容则说明任务已被正常识别:
rake zendesk:update_zendesk_rake # update status group values
之后就可以正常执行rake zendesk:update_zendesk_rake命令完成任务。
内容的提问来源于stack exchange,提问作者user16741832
相关产品推荐
相关产品推荐

