【问题标题】:How to set class variables based on the current rails enviroment如何根据当前的rails环境设置类变量
【发布时间】:2011-07-26 03:56:15
【问题描述】:

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

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

我有以下几点:

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

让这两个#s、500 和 1.minute.form_now 成为基于 rails 环境的变量的正确方法是什么,对于开发人员来说,我希望 #s 比生产和登台时更短。

谢谢

【问题讨论】:

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


    【解决方案1】:

    使用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
    

    【讨论】:

    • 只是另一个语法,Rails.env == "production" 可以挤成Rails.env.production?
    【解决方案2】:

    将时间戳计算放入使用 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。像这样将它放在一个单独的方法中也有助于测试,因为您可以轻松地存根它的返回值来测试各种场景。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 2016-11-15
      • 2012-12-17
      相关资源
      最近更新 更多