Tag: 自动加载

LoadError无法自动加载常量

似乎自动加载器正在加载lib / tools / address而不是我的模型 地址抛出以下错误 LoadError:无法自动加载常量Address,预期/lib/tools/address.rb来定义它 有人能告诉我我做错了什么。 我以为 地址将指向常量模型/ address.rb 和 Tools :: lib / tools / address.rb的地址 应用程序/模型/ address.rb class Address blah end LIB /工具/ address.rb module Tools class Address blah blah end end

递归地包括所有模型子目录

如何在模型和lib目录中递归加载所有目录? 在application.rb中,我有以下几行: config.autoload_paths += Dir[Rails.root.join(‘app’, ‘models’, ‘{**}’)] config.autoload_paths += Dir[Rails.root.join(‘lib’, ‘{**}’)] 但他们似乎只添加了一个级别的模型和lib子目录。 谢谢

Rails:未初始化的常量只发生在生产服务器上

我有一个放在lib/network : module NetworkApi class NetworkProxy end end 然后在另一个类中,我引用了这个类: network_proxy = ::NetworkApi::NetworkProxy.new(params) 一切都在我的开发环境中正常运行,但是当我部署到服务器时,我在上面的行中收到错误消息: NameError: uninitialized constant NetworkApi::NetworkProxy 我不知道为什么会发生这种奇怪的错误。 请告诉我为什么。

为什么我在线程中无法访问某些库类?

为什么如下 require “bio” threads = (1..2).map do Thread.new do seqs = [“gattaca”] * 5 alignment = Bio::Alignment.new(seqs) end end threads.each {|th| th.join} ; nil 给出此错误消息? NameError: uninitialized constant Bio::Alignment from (irb):6 from (irb):10:in `join’ from (irb):10 from (irb):10:in `each’ from (irb):10

尽管在该文件中定义了Rails,但无法从文件中自动加载常量

这是一个难以解释的问题。 我在另一个模块名称空间中有一个模块,如下所示 # app/models/points/calculator.rb module Points module Calculator def self.included(base) base.send(:include, CommonMethods) base.send(:include, “Points::Calculator::#{base}Methods”.constantize) end end end 那么在其他课程中,我需要做的就是: class User include Points::Calculator end 我已经在application.rb中指定了这个目录可以自动加载…(尽管我认为rails通过模型进行递归…) config.autoload_paths += Dir[ Rails.root.join(‘app’, ‘models’, “points”) ] 在开发环境中,一切正常。 运行测试(和生产环境)时,我收到以下错误: Unable to autoload constant Points::Calculator, expected /Users/pete/work/recognize/app/models/points/calculator.rb to define it (LoadError) 我实际上遵循了这里的建议来解决问题:通过在application.rb中明确要求calculator.rb, 阻止Rails在开发模式下卸载模块 。 但是,为什么会发生这种情况? 我在ActiveSupport的dependencies.rb文件中粘贴了一些调试输出,并注意到该文件需要两次。 第一次需要我可以看到常量确实已加载。 但是第二次它需要的常量已被卸载,就Rails所知,但是当调用实际的require时,ruby返回false,因为ruby知道它已经需要它。 然后Rails抛出“无法自动加载常量”错误,因为常量仍然不存在,并且ruby没有“重新要求”该文件。 任何人都可以阐明为什么会发生这种情况?