Ruby LoadError:需要{app_path}/models/model file.rb来定义模型名
我在运行此命令时遇到此错误Ruby LoadError:需要{app_path}/models/model file.rb来定义模型名,ruby,ruby-on-rails-3,multithreading,Ruby,Ruby On Rails 3,Multithreading,我在运行此命令时遇到此错误 LoadError: Expected /home/user/Desktop/Tripurari/myapp/app/models/host.rb to define Host## 但上面的每一件事都是正确的。有人能告诉我下面的确切问题是什么吗 def self.check_all(keyword) memo_mutex = Mutex.new memo = {} threads = [] name = keyword.
LoadError: Expected /home/user/Desktop/Tripurari/myapp/app/models/host.rb to define Host##
但上面的每一件事都是正确的。有人能告诉我下面的确切问题是什么吗
def self.check_all(keyword)
memo_mutex = Mutex.new
memo = {}
threads = []
name = keyword.keyword
SITES.each do |site_and_options|
threads << Thread.new do
@host = Host.find_or_create_by_name(site)
if keyword.unavailable_usernames.find_by_host_id(@host.id)
memo[@host.name] = true
else
memo[@host.name] = false
end
end
end
threads.each { |t| t.join }
memo
end
def self.check_all(关键字)
memo_mutex=mutex.new
备忘录={}
线程=[]
name=keyword.keyword
SITES.each do | site_和_选项|
线程假设您上面引用的代码位于模型的.rb文件中,请将require\u relative“host”
添加到该文件的顶部。问题可能是由自动加载器引起的。如果在第一次进入创建两个新线程的循环时,Host
类尚未加载,它将自动加载,即Rails在加载路径中搜索与命名约定匹配的文件,并需要该文件
此过程不是线程保存。在您的例子中,当您快速连续地创建servral线程,每个线程都试图自动加载全局类时,您会遇到竞争条件,并且会发生奇怪的事情。基本上,您有两种解决方法:
在启动循环之前,可以使用require'host'
在启动线程之前显式加载模型
或者您可以设置config.threadsave初始值设定项中的代码>。这将(除其他外)在启动服务器时预加载所有类。这是首选的,因为这样可以避免大量其他难以调试的并发性问题。有关config.threadsafe的更多信息代码>,请参考Rails 4中的说明,它应该被完全删除