如何使用日期作为 rake 任务的参数
How to use date as parameters for a rake task
我有一个 rake 任务,如下所示,需要在 import_date
部分输入日期才能执行它。放入 import_date
部分的日期然后保存在 table.
中名为 import_date
的列中
namespace :graduated_member do
desc 'import member'
task: create_csv, ['import_date'] => :environment do |task, args|
#actions
现在,我希望代码仅在输入正确类型的日期时才有效。如果格式错误,我希望它不执行 rake 任务,但给我一个错误代码,告诉我日期格式错误。
# This should work
RAILS_ENV=production ./bin/rake member:create_csv[20201119]
# This shouldn't work, because the date has too many digits.
RAILS_ENV=production ./bin/rake member:create_csv[20200001119]
下面的代码是否适合这样做?
namespace :graduated_member do
desc 'import member'
task: create_csv, ['import_date'] => :environment do |task, args|
require 'date'
date = Date.today
if args.worked_on == date.strftime("%Y%m%d")
# action
else
p "ERROR"
end
end
更新
我不一定要它比较 'import_date' 和今天的日期的代码,我希望它只是看看用户输入的 'import_date' 是否遵循“%”的规则Y%m%d”。
在这种情况下,下面的代码会更好吗?
namespace :graduated_member do
desc 'import member'
task: create_csv, ['import_date'] => :environment do |task, args|
if args.import_date.strftime("%Y%m%d")
# action
else
p "ERROR"
end
您可以在字符串上使用 to_date
方法将 args
转换为 Date
对象。然后你可以调用 today?
方法来检查通过的日期。此外,您不需要要求 date
它已经被 Rails 要求。
namespace :graduated_member do
desc 'import member'
task :create_csv, ['import_date'] => :environment do |task, args|
if args['import_date'].to_date.today?
# action
else
p "ERROR"
end
end
end
在这种情况下,如果日期格式不正确,您将得到此异常 ArgumentError: invalid date
UPD
如果你想和其他日期比较。
namespace :graduated_member do
desc 'import member'
task :create_csv, ['import_date'] => :environment do |task, args|
if args['import_date'].to_date == Date.new(2020, 11, 26)
# action
else
p "ERROR"
end
end
end
如果你想确保你的论点遵循特定的模式
namespace :graduated_member do
desc 'import member'
task :create_csv, ['import_date'] => :environment do |task, args|
Date.strptime(args['import_date'], '%Y%m%d')
# action
rescue ArgumentError
p "ERROR"
end
end
我有一个 rake 任务,如下所示,需要在 import_date
部分输入日期才能执行它。放入 import_date
部分的日期然后保存在 table.
import_date
的列中
namespace :graduated_member do
desc 'import member'
task: create_csv, ['import_date'] => :environment do |task, args|
#actions
现在,我希望代码仅在输入正确类型的日期时才有效。如果格式错误,我希望它不执行 rake 任务,但给我一个错误代码,告诉我日期格式错误。
# This should work
RAILS_ENV=production ./bin/rake member:create_csv[20201119]
# This shouldn't work, because the date has too many digits.
RAILS_ENV=production ./bin/rake member:create_csv[20200001119]
下面的代码是否适合这样做?
namespace :graduated_member do
desc 'import member'
task: create_csv, ['import_date'] => :environment do |task, args|
require 'date'
date = Date.today
if args.worked_on == date.strftime("%Y%m%d")
# action
else
p "ERROR"
end
end
更新
我不一定要它比较 'import_date' 和今天的日期的代码,我希望它只是看看用户输入的 'import_date' 是否遵循“%”的规则Y%m%d”。 在这种情况下,下面的代码会更好吗?
namespace :graduated_member do
desc 'import member'
task: create_csv, ['import_date'] => :environment do |task, args|
if args.import_date.strftime("%Y%m%d")
# action
else
p "ERROR"
end
您可以在字符串上使用 to_date
方法将 args
转换为 Date
对象。然后你可以调用 today?
方法来检查通过的日期。此外,您不需要要求 date
它已经被 Rails 要求。
namespace :graduated_member do
desc 'import member'
task :create_csv, ['import_date'] => :environment do |task, args|
if args['import_date'].to_date.today?
# action
else
p "ERROR"
end
end
end
在这种情况下,如果日期格式不正确,您将得到此异常 ArgumentError: invalid date
UPD
如果你想和其他日期比较。
namespace :graduated_member do
desc 'import member'
task :create_csv, ['import_date'] => :environment do |task, args|
if args['import_date'].to_date == Date.new(2020, 11, 26)
# action
else
p "ERROR"
end
end
end
如果你想确保你的论点遵循特定的模式
namespace :graduated_member do
desc 'import member'
task :create_csv, ['import_date'] => :environment do |task, args|
Date.strptime(args['import_date'], '%Y%m%d')
# action
rescue ArgumentError
p "ERROR"
end
end