在开发环境中LoadError(无法自动加载常量XYZ,预期XYZ.rb来定义它)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在开发环境中LoadError(无法自动加载常量XYZ,预期XYZ.rb来定义它)相关的知识,希望对你有一定的参考价值。

最近,我没有重新启动我的开发服务器就无法更改我的应用程序,否则我收到此错误:

LoadError (Unable to autoload constant BotFeedback, expected ../../bot_feedback.rb to define it)

这在以前不是问题,我不完全确定为什么这已经成为一个问题。我在application.rb中配置了这些设置:

# Auto-load the bot and its subdirectories
config.paths.add File.join('app', 'bot'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'bot', '*')]

我的app / bot文件夹包含以下文件:

bot.rb用:

require "#{Rails.root}/app/bot/orderbot.rb"
Bot.on :message do |message|
  OrderBot.new()
  ..
end

def somefunction
  OrderBot.new()
  ..
end

orderbot.rb:

require "#{Rails.root}/app/bot/bot_feedback.rb"
require "#{Rails.root}/app/bot/bot_demo.rb"
require "#{Rails.root}/app/bot/bot_helper.rb"
class OrderBot
  include BotFeedback
  include BotDemo
  include BotHelper
  (many more includes)
  ..
end

bot_feedback.rb:

require "#{Rails.root}/app/models/concerns/sharedmethods.rb"
class OrderBot
  include Sharedmethods
  module BotFeedback
    ...
  end
end

bot_demo.rb:

class OrderBot
  module BotDemo
    ..
  end
end

bot_helper.rb:

require "#{Rails.root}/app/models/concerns/sharedmethods.rb"
class OrderBot
  include Sharedmethods
  module BotHelper
    ...
  end
end

我的猜测是包括sharedmethods文件导致这个,因为我没有看到任何其他问题。更改rails应用程序中的sharedmethods文件似乎总是需要重新启动服务器。

我将不胜感激任何帮助/建议。

更新:

看起来使用'load'而不是'require'似乎可以解决问题。我不确定这是不是正确的方法...因为如果一次又一次地加载文件会占用更多内存?

load "#{Rails.root}/app/bot/bot_feedback.rb"
load "#{Rails.root}/app/bot/bot_demo.rb"
load "#{Rails.root}/app/bot/bot_helper.rb"
答案

在了解了有关rails'autooload'和'require'的所有内容后,终于找到了答案

我实际上并不需要“要求”任何文件,因为它们已经自动加载。罪魁祸首是“模块”,没有必要。

以上是关于在开发环境中LoadError(无法自动加载常量XYZ,预期XYZ.rb来定义它)的主要内容,如果未能解决你的问题,请参考以下文章

Rails 控制台:无法自动加载常量

无法加载此类文件 -- openssl (LoadError)

机架错误 - LoadError:无法加载此类文件

LoadError: 无法加载此类文件 -- 目录/文件名

安装 ruby​​-2.1.2:无法加载此类文件 -- openssl (LoadError)

rails 无法加载此类文件 -- rake (LoadError)