Ruby on rails 如何在运行的ruby进程中更改Date.today的值

Ruby on rails 如何在运行的ruby进程中更改Date.today的值,ruby-on-rails,ruby,date,Ruby On Rails,Ruby,Date,我知道这是个坏主意,但我有很多遗留代码,我想运行一些历史批处理作业。我不想更改系统日期,因为其他东西在同一个系统上运行。是否有任何方法可以更改Date.today的值,该值仅在给定进程的生命周期内返回。这里的想法是倒带并运行一些旧的批处理脚本,这些脚本用于过时的工作 谢谢 Joel您可以重新定义Date类的“today”类方法 class Date def Date.today return Date.new(2000,1,1) end end 这将确定日期。今天是2000-0

我知道这是个坏主意,但我有很多遗留代码,我想运行一些历史批处理作业。我不想更改系统日期,因为其他东西在同一个系统上运行。是否有任何方法可以更改Date.today的值,该值仅在给定进程的生命周期内返回。这里的想法是倒带并运行一些旧的批处理脚本,这些脚本用于过时的工作

谢谢
Joel

您可以重新定义Date类的“today”类方法

class Date
  def Date.today
    return Date.new(2000,1,1)
  end
end

这将确定日期。今天是2000-01-01。

你可以像尼古拉斯给你展示的那样使用monkey patch Ruby,也可以使用TimeCop gem。它的设计目的是使编写测试更容易,但您也可以在普通代码中使用它

# Set the time where you want to go.
t = Time.local(2008, 9, 1, 10, 5, 0)

Timecop.freeze(t) do
   # Back to the future!
end
# And you're back!

# You can also travel (e.g. time continues to go by)
Timecop.travel(t)
这是一段很棒但很简单的代码。试试看,当你自己修改日期和时间的时候,它会帮你省去一些麻烦


链接:

如果重新定义
日期。今天
似乎太老套了,你可以试试

从github页面:

require 'delorean'

# Date.today => Wed Feb 24
Delorean.time_travel_to "1 month ago" # Date.today => Sun Jan 24
Delorean.back_to_the_present          # Date.today => Wed Feb 24

好的,酷,我把代码放在哪里。我有一个rails应用程序,我的批处理文件作为rake任务运行。如何确保只有rake任务包含此代码。我只是把它放在rake任务本身吗?