簡體   English   中英

如何使用日期作為 rake 任務的參數

[英]How to use date as parameters for a rake task

我有一個如下的 rake 任務,需要在import_date部分輸入日期才能執行它。 然后將放在import_date部分的日期保存在表中名為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 object。 那你today? 檢查通過日期的方法。 此外,您不需要要求 Rails 已經要求的date

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM