2011-07-25 105 views
1

我有一個/lib/tasks/send_mailer_job.rb文件。如何根據當前軌道環境設置類變量

在生產中,我希望該文件每5分鐘運行一次。然而,在開發時,等待5分鐘來測試一個變化會讓我放慢速度,所以我希望這樣做是1分鐘。最近我剛剛更新了代碼中的變量,但這很容易出錯,因爲我可以檢入錯誤的#並終止生產服務器。如何設置該變量基礎上,環境

我有以下幾點:

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

什麼是有這兩個#秒,500以正確的方式,並根據1.minute.form_now是可變rails環境下,對於dev我希望比生產& staging更短的#s。

謝謝

回答

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。把它放在這樣一個單獨的方法中也有助於測試,因爲你可以輕鬆地存儲它的返回值來測試各種場景。

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 
+2

只是另一個sytax,'Rails.env ==「生產''可以被擠壓到'Rails.env.production?' – rubish

+0

@Rubish - 燁,謝謝! –