我有一个Rails金属类,基本上只进行一次检查以确保系统中有管理员用户,如果没有,它会重定向用户创建一个。现在我正在使用机架会话来防止双重检查,但这似乎有以下问题:
我想知道是否有可能指示Rails从链中“删除”或“卸载”该类。这可以安全地完成吗?还有其他建议吗?
答案 0 :(得分:2)
最简单的解决方案(虽然不是很干净)是存储管理员用户存在于类中的事实。
class EnsureAdminUser
def self.call(env)
if @admin_defined or Admin.any?
@admin_defined = true
[404, {"Content-Type" => "text/html"}, "Not Found"]
else
…
end
end
end
这可以节省每个请求的数据库命中率。
要真正删除金属,你需要做一些更激进(和邪恶)的事情:
ObjectSpace.each_object(Rails::Rack::Metal){|metal_handler|
metal_handler.instance_eval{ @metals.delete(EnsureAdminUser) }
}