[英]Can I have thread safe per-request configuration for database connection and table_name in ActiveRecord (or Mongoid)?
又称<<“用户有很多数据库”的问题。>>
环境
我的应用程序建模如下:
user has_many databases
database has_many tables
table has_many rows
row habtm(+value) columns
你明白了!
因此,我不想在数据库内建模数据库,而是希望:
每个用户都会在他的数据库中LCRUD他的表(类似于phpmyadmin)
问题
我想为数据库连接和table_name提供线程安全的每请求配置
class Table < ActiveRecord::Base
end
# in some controller
# set the connection to the user-selected database from some DB list
Table.connection = current_user.session.connection
# set the name to the user-selected table from some tables list
Table.table_name = params[:table_name]
@rows = Table.all #display them
编辑
如您所见,连接是全局的并且在线程之间共享,但根据我的应用程序的规范,每个用户都有自己的连接。 现在想象两个不同的用户同时发出2个请求。
选项?
我相信这是咒语:
使用Class.new(AR::Base)
动态创建类
post_class = Class.new(ActiveRecord::Base)
post_class.connection = set_up_connection()
post_class.table_name = :posts
@posts = post_class.all
puts @posts
# note: post_class will get GC'ed at scope end just like any var, sweet!
Rails通常设置为每个请求一个进程,以便每个http请求由其自己的进程处理。 查找允许的apache模块的乘客
在这样的配置中,不需要线程安全,事实上活动记录不完全是安全的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.