【发布时间】: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