2014-10-31 27 views
0

我有一個運行在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 
+0

作爲一個說明,常量是煩人的,因爲它們很難被覆蓋。將這些實現爲返回常量值的方法會更好,因爲這些方法很容易重做。例如,使用'matt_accessor'。 – tadman 2014-10-31 21:04:42

回答

0

您可以在文件的開頭添加require 'portal/seo'(或其他適當的文件名)。

相關問題