在开发环境中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来定义它)的主要内容,如果未能解决你的问题,请参考以下文章
无法加载此类文件 -- openssl (LoadError)