为什么在我的rake任务中哈希仍然返回nil?
namespace :pull_and_update_liverail_daily do
desc 'Pull and Update'
task :by_date, [:date_start, :date_end] => :environment do |t,args|
args[:date_start] ||= DateTime.yesterday.strftime('%Y-%m-%d')
args[:date_end] ||= DateTime.yesterday.strftime('%Y-%m-%d')
Rake::Task["stats:import_all"].invoke(args[:date_start], args[:date_end])
Rake::Task["update_daily_stats:by_date"].invoke(args[:date_start])
end
end
这虽然有效..
date_start = args[:date_start] || DateTime.yesterday.strftime('%Y-%m-%d')
date_end = args[:date_end] || DateTime.yesterday.strftime('%Y-%m-%d')
答案 0 :(得分:1)
您应该使用with_defaults
:
namespace :pull_and_update_liverail_daily do
desc 'Pull and Update'
task :by_date, [:date_start, :date_end] => :environment do |t,args|
args.with_defaults(date_start: DateTime.yesterday.strftime('%Y-%m-%d'),
date_end: DateTime.yesterday.strftime('%Y-%m-%d'))
Rake::Task["stats:import_all"].invoke(args[:date_start], args[:date_end])
Rake::Task["update_daily_stats:by_date"].invoke(args[:date_start])
end
end
当你尝试这样做时:
args[:date_start] = DateTime.yesterday.strftime('%Y-%m-%d')
实际发生的是:
args.[]=(:date_start, DateTime.yesterday.strftime('%Y-%m-%d'))
(它调用方法[]=
)
由于TaskArguments
未定义[]=
方法,因此调用其method_missing
,它会尝试查找名为:[]=
的参数的值:
def method_missing(sym, *args) lookup(sym.to_sym) end
解释了为什么值没有改变,但你没有得到任何例外......
答案 1 :(得分:-1)
与
相同nil ||= DateTime.yesterday.strftime('%Y-%m-%d')
您无法将任何内容分配给NilClass的实例。这就是你的第二个选择有效的原因。
date_start = args[:date_start] || DateTime.yesterday.strftime('%Y-%m-%d')
这里有一个要创建的变量,如果args [:date_start]为nil,则继续使用昨天的日期。