最近,我无法在不重新启动开发服务器的情况下对我的应用进行更改,否则会收到此错误:
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"
答案 0 :(得分:1)
在了解了有关rails&autoload'的所有内容后,终于找到了答案。和'要求'
我实际上并不需要'任何文件,因为它们已经自动加载。罪魁祸首是'模块',它没有必要。