ruby-on-rails – Rails设计CouchDB,每个子域有一个数据库

ruby-on-rails – Rails设计CouchDB,每个子域有一个数据库,第1张

概述我正在构建一个需要CouchDB移动同步功能的应用程序. 因此,对于服务上的每个“帐户”,我想创建一个单独的CouchDB数据库实例,以便只同步此帐户的数据. 我正在使用CouchRest Model和Devise,它通过一个单独的用户数据库处理子域身份验证. 但是,在运行时为每个模型连接到适当数据库的正确方法是什么? 设置命名连接的before_filter,然后循环遍历每个模型并执行以下 *** 作: 我正在构建一个需要CouchDB移动同步功能的应用程序.

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

我正在使用CouchRest Model和Devise,它通过一个单独的用户数据库处理子域身份验证.

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

设置命名连接的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_databaseend

(伪代码)

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

好像应该有一个更简单的方法!

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

class OneDbPerAccountdocument < CouchRest::Extendeddocument  def self.database    Account.current_database  end  ...end

然后从这个类中继承您的模型(Post,Comment).

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

有了这个技巧,你需要在控制器中做的只是调用类似的东西

Account.current = request.subdomain

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

总结

以上是内存溢出为你收集整理的ruby-on-rails – Rails设计CouchDB,每个子域有一个数据库全部内容,希望文章能够帮你解决ruby-on-rails – Rails设计CouchDB,每个子域有一个数据库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1278102.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存