
因此,对于服务上的每个“帐户”,我想创建一个单独的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,每个子域有一个数据库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)