我有一个运行在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