【问题标题】:LoadError (Unable to autoload constant XYZ, expected XYZ.rb to define it) in development environment开发环境中的 LoadError(无法自动加载常量 XYZ,需要 XYZ.rb 来定义它)
【发布时间】:2017-12-16 05:22:54
【问题描述】:

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

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"

【问题讨论】:

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


    【解决方案1】:

    在学习了所有关于 rails 'autoload' 和 'require' 的知识后终于找到了答案

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多