我有一個運行在Ruby 1.9.3上的Rails 3.2應用程序,並且我被要求將它更新到Ruby 2.1以及後來的Rails 4.1。雖然升級到Ruby 2.1時出現問題:初始化程序在Ruby 2.1之前的gem中調用
我們公司有一個由我們的系統使用的gem,並定義了一些全局常量。應用程序必須在開發過程中覆蓋這些常量(我們知道這很常見,但在我們重新啓動臨時服務器之前它是暫時的),所以我有一個覆蓋這些常量的文件。到目前爲止,這工作得很好,我在服務器控制檯(warning: already initialized constant ...
)上得到了一些警告,但它工作。
但是,現在Rails似乎在gem之前調用了我的自定義初始化程序,有人知道Ruby 2.0或2.1中可能引發這種行爲變化的變化嗎?請注意,我仍在使用Rails 3.2,我只是更新了一些寶石,使它與新的Ruby兼容。
這是我如何在初始化程序和gem中設置常量(兩個文件具有相同的名稱並且基本相同)。需要被覆蓋的常量是URL_PORTAL:
module Portal
module Sso
URL_PORTAL_PRODUCTION = "(URL1)"
URL_PORTAL_DEVELOPMENT = "(URL2)" # I overwrite this in the initializer
URL_PORTAL_TEST = "(URL3)"
URL_PORTAL = case Rails.env
when "production" then URL_PORTAL_PRODUCTION
when "test" then URL_PORTAL_TEST
else URL_PORTAL_DEVELOPMENT
end
end
end
作爲一個說明,常量是煩人的,因爲它們很難被覆蓋。將這些實現爲返回常量值的方法會更好,因爲這些方法很容易重做。例如,使用'matt_accessor'。 – tadman 2014-10-31 21:04:42