gpt4 book ai didi

ruby-on-rails - Mongoid 中的 find_or_create_by 线程安全吗?

转载 作者:行者123 更新时间:2023-12-02 23:50:14 30 4
gpt4 key购买 nike

我有一个使用 Mongoid 的 find_or_create_by 方法的网络应用程序。

poll = Poll.find_or_create_by(fields)

在我们投入生产之前,我尝试运行故障场景,我发现多个用户可以尝试使用此方法访问此资源。它是否有可能创建同一对象的多个实例?我可以做什么来防止这种情况发生?

最佳答案

免责声明:我是 Mongoid 和 Rails 的新手,所以我可能完全错了。

查看modifiable.rbmany.rb它似乎没有锁定任何资源。

在我看来,它只是执行“where().first”查询,然后如果没有返回任何内容,则执行“create”查询:

 def find_or(method, attrs = {}, &block)
where(attrs).first || send(method, attrs, &block)
end

对于 find_or_create_by,“send”将调用“create_document”:

def create_document(method, attrs = nil, &block)
klass.__send__(method,
selector.reduce(attrs || {}) do |hash, (key, value)|
unless key.to_s =~ /\$/ || value.is_a?(Hash)
hash[key] = value
end
hash
end, &block)
end

结论:对我来说,这似乎是一种方便的方法,不要指望它是“线程安全的”。我希望有更多关于此方法的文档。

关于ruby-on-rails - Mongoid 中的 find_or_create_by 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072866/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com