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

时间:2017-12-16 05:22:55

标签: ruby-on-rails ruby ruby-on-rails-3 rack

最近,我无法在不重新启动开发服务器的情况下对我的应用进行更改,否则会收到此错误:

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 with:

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

def somefunction
  OrderBot.new()
  ..
end

orderbot.rb with:

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 with:

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'而不是要求'似乎解决了这个问题。我不确定这是不是正确的方法..因为如果一次又一次地加载文件会占用更多内存?

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

1 个答案:

答案 0 :(得分:1)

在了解了有关rails&autoload'的所有内容后,终于找到了答案。和'要求'

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