轨道是否会根据环境不断自动加载?

时间:2016-02-18 05:01:46

标签: ruby-on-rails ruby ruby-on-rails-4

我正在开发一个Rails应用程序(Rails4.2.5.1,Ruby2.2.3)。在暂存环境中,某些类不是 正确认识。另一方面,在开发环境中,所有类都被正确识别。以下是暂存rails console的结果。

$ bundle exec rails c staging
Running via Spring preloader in process 6940
Loading staging environment (Rails 4.2.5.1)
[1] pry(main)> StartTask
=> StartTask
[2] pry(main)> Japan::Tokyo::CheckTask
=> Japan::Tokyo::CheckTask (call 'Japan::Tokyo::CheckTask.connection' to establish a connection)
[3] pry(main)> Hoge::Fuga::SingleBase
=> Hoge::Fuga::SingleBase (call 'Hoge::Fuga::SingleBase.connection' to establish a connection)
[4] pry(main)> Hoge::Fuga::Base   
=> Hoge::Fuga::Base
[5] pry(main)> StartTask.superclass        
=> Hoge::Fuga::Base
[6] pry(main)> Japan::Tokyo::CheckTask.superclass
=> Hoge::Fuga::SingleBase (call 'Hoge::Fuga::SingleBase.connection' to establish a connection)
[7] pry(main)> Hoge::Fuga::SingleBase.superclass
=> Base(abstract)
[8] pry(main)> Hoge::Fuga::Base.superclass      
=> Object

我希望'Hoge :: Fuga :: SingleBase.superclass'返回'Hoge :: Fuga :: Base',但实际结果是'Base(abstract)'。而且,我有一些奇怪的警告信息。('调用xxxxxxxxxxxxxxxxx来建立连接')

以下是相关代码。

# app/tasks/start_task.rb
class StartTask < Hoge::Fuga::Base
  something...

# app/tasks/japan/tokyo/check_task.rb
module Japan
  module Tokyo
    class CheckTask < Hoge::Fuga::SingleBase
      something...

# lib/hoge/fuga/single_base.rb
module Hoge::Fuga
  class SingleBase < Base
    something...

# lib/hoge/fuga/base.rb
module Hoge::Fuga
  class Base
    something...

# config/application.rb
config.autoload_paths << "#{Rails.root}/lib"

你知道原因吗?

1 个答案:

答案 0 :(得分:1)

没有 Rails常量分辨率这样的东西。常量解析在Ruby语言规范中定义,并由Ruby编译器或解释器实现。 Ruby不允许从用户代码更改常量分辨率算法,因此不同的Rails环境之间的常量分辨率算法不可能