2014-10-31 30 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'(或其他适当的文件名)。

相关问题