Ruby on Rails - 多个数据库连接

时间:2016-10-05 12:27:48

标签: ruby-on-rails ruby

我正在开发一个应用程序,它允许用户建立许多数据库连接,并在用户和连接之间建立多种关系。在用户手动连接每个连接之前,连接是被动的。动机是平行地对它们进行查询。

我没有找到与此相关的好教程,你能帮我提一些如何实现这个目标的技巧吗?

3 个答案:

答案 0 :(得分:2)

经过一番研究后发现,使用ActiveRecord连接池有一个更简单的方法。

  1. 在用户和数据库连接之间建立关系,在本例中为用户1 .. n连接。
  2. 确保模型记录可以使用

    单独连接
    object PatternCount_v2 {
    def main(args: Array[String]) {
        // The text where we will find the patterns
        val inputFile = args(0);
        // The list of patterns 
        val inputPatterns = args(1)
        val outputPath = args(2);
    
        val conf = new SparkConf().setAppName("Simple Application")
        val sc = new SparkContext(conf)
    
        // Load the text file
        val textFile = sc.textFile(inputFile).cache()
        // Load the patterns
        val patterns = Source.fromFile(inputPatterns).getLines.map(line => line.r).toList
    
        val patternCounts = textFile.flatMap(line => {
            println(line)
            patterns.foreach(
                pattern => {
                    println(pattern)
                    (pattern,pattern.findAllIn(line).length )
    
                }
            )
        }
    
        )
        patternCounts.saveAsTextFile(outputPath)
    
    
    }}
    
  3. 完成数据库后关闭连接。

  4. 参考文献:

    http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionHandler.html

    http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html

答案 1 :(得分:1)

对于我的应用程序,我使用这个宝石

https://github.com/thiagopradi/octopus

有很好的文档和示例。

答案 2 :(得分:1)

假设您想使用activerecord,您可以采用两种方式:

这里有一个如何使用这种模型的例子,class_name参数是要使用的模型的名称。它来自Sinatra应用程序,但我确信您能够适应Rails。它是使用多个模型的ExtJs javascript应用程序的后端,期望JSON作为结果。

 # controller

%w(create read update destroy).each do |action|
  [:get, :post].each do |method|
      send(method, "/path/#{action}") do
        response.headers['Access-Control-Allow-Origin'] = '*'
        content_type :json
        if params[:store]
          store = Object.const_get(params[:store]) 
        else
          store = Signal
        end
        resp = send(action, store, params)
        jsonp(resp)
      end
  end
end

# in helper.rb

def read (class_name, params)
  params = params.symbolize_keys
  default = {store: 'Signaal', limit: 10, sort: 'id', order: 'ASC', start: 0, user: '0'}
  params = default.merge params
  generic_data_getter(class_name, params, params[:start], params[:limit], params[:sort], params[:dir])
end

def generic_data_getter (class_name, params, start=0, limit=10, sort='id', dir='ASC')
  selection = build_selection(class_name, params)
  data = class_name.where(selection).offset(start).limit(limit).order("#{sort} #{dir}")
  {:success => true, :totalCount => data.except(:offset, :limit, :order).count, :result => data.as_json}
end

如果没有,或者对于简单的预定义搜索或速度,您可以连接和断开连接,因为需要连接。这是Oracle的一个例子。

require 'oci8'
CONN = OCI8.new('scheme','password','dbserver')
sql = '....'
CONN.exec(sql) {|record|puts record.join(',')}
CONN.logoff

请注意appleius使用代码注入。