gpt4 book ai didi

ruby-on-rails - Rails + Devise + CouchDB 每个子域一个数据库

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:59 25 4
gpt4 key购买 nike

我正在构建一个需要 CouchDB 的移动同步功能的应用程序。

因此,对于服务上的每个“帐户”,我想创建一个单独的 CouchDB 数据库实例,以便仅同步该帐户的数据。

我正在使用 CouchRest 模型和设计,它通过单独的用户数据库处理子域身份验证。

然而,对于每个模型,在运行时连接到适当数据库的正确方法是什么?

设置命名连接的 before_filter,然后遍历每个模型并执行如下操作: ?

[Post, Tag, Comment].each do |model|
model_server = CouchRest::Server.new(couch_config[:connection])
model_server.default_database = "my_project-#{Rails.env}-#{model.to_s.downcase}"
model.database = model_server.default_database
end

(伪代码)

假设 Web 服务器 (Heroku) 在单独的线程中运行每个请求,这应该意味着在每个请求中,数据库连接都会动态更改。

看来应该有更简单的方法!

最佳答案

作为问题的解决方案,您可以覆盖数据库方法:

class OneDbPerAccountDocument < CouchRest::ExtendedDocument

def self.database
Account.current_database
end
...
end

然后只需从此类中继承您的模型(帖子、标签、评论)。

class Account < OneDbPerAccountDocument

def self.current=(name)
@current_database = @couch_server.database("my-project_#{name}")
end

def self.current_database
@current_database
end

end

有了这个技巧,你需要在 Controller 中做的就是调用类似的东西

  Account.current = request.subdomain

但是,请注意,当您拥有数千个帐户(数据库)时,这种方法会变得有点困惑。

关于ruby-on-rails - Rails + Devise + CouchDB 每个子域一个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5791104/

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