如何根据当前rails环境设置类变量

时间:2011-07-25 19:38:33

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个/lib/tasks/send_mailer_job.rb文件。

在制作时,我希望该文件每5分钟运行一次。然而,在开发时,等待5分钟来测试一个变化正在减慢我的速度,所以我希望这是1分钟。最近我刚刚更新了代码中的变量但是容易出错,因为我可以签入错误的#并终止生产服务器。如何根据环境设置该变量

我有以下内容:

 records = Stuff.find(:all, :conditions => ["last_activity_at <= ?", (Time.now - 500)])
 .....  1.minute.from_now

根据rails环境,将这两个#,500和1.minute.form_now变为可变的正确方法是什么?对于开发我想要更短的#s而不是生产和放大分期。

由于

2 个答案:

答案 0 :(得分:3)

使用Rails.env。示例如下。

class Stuff < ActiveRecord::Base

  def self.latest
    time = Rails.env == "production" ? 5.minutes.from_now : 1.minute.from_now
    self.find(:all, :conditions => ["last_activity_at <= ?", time])
  end

end

答案 1 :(得分:1)

将时间戳计算放入使用Rails.env选择正确延迟的方法中:

class Stuff < ActiveRecord::Base
  def self.cutoff_time
    if Rails.env.production?
      5.minutes.ago
    else
      1.minute.ago
    end
  end
end

然后使用此方法代替Time.now - 5.minutes,无论您需要计算截止时间。将它放在这样的单独方法中也有助于测试,因为您可以轻松地将其返回值存根以测试各种场景。