IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    sinatra使用mysql做为数据库

    深夜的蚊子发表于 2013-03-23 07:47:02
    love 0

    sinatra,一个轻量级的ruby web框架。如果要写一个不怎么复杂的web小应用,使用这个就在适合不过了。

    最近蚊子就自己尝试着写一个小应用,结果在使用mysql这块犯了愁,正常情况下,ruby程序调用mysql还是很容易的,只需要这样做就行了

    require 'mysql'
    
    conn = Mysql::new("host", "user", "passwd", "db")
    res = conn.qurey("select * from table1")
    res.each do |row|
      col1 = row[0]
      col2 = row[1]
    end

    但是呢,这样有一个不好的问题,就是,如果我要把数据库的相关操作放到module目录下,变成一个模块来调用,那sinatra自己的settings用法就没法实现.使用settings.config就会报错。不过现在好了,使用connection_pool模块可以解决这个问题,代码如下

    require 'rubygems'
    require 'bundler/setup'
    require 'yaml'
    require 'connection_pool'
    require 'mysql'
    
    require './app'
    
    class DB
        @@db_server = CONFIG[ENV["RACK_ENV"]]['dbconfig']['db_server']
        @@db_port = CONFIG[ENV["RACK_ENV"]]['dbconfig']['db_port']
        @@db_user = CONFIG[ENV["RACK_ENV"]]['dbconfig']['db_user']
        @@db_pass = CONFIG[ENV["RACK_ENV"]]['dbconfig']['db_pass']
        @@db_name = CONFIG[ENV["RACK_ENV"]]['dbconfig']['db_name']
    
        @pool = ConnectionPool.new(size: 3, timeout: 5) do
            conn = Mysql.new(@@db_server, @@db_user, @@db_pass, @@db_name, @@db_port)
            conn.query("SET NAMES UTF8")
            conn
        end
        # 下面的方法从 connection_pool 暴露出来的
        class << self
            # 使用闭包的形式调用
            def with(█)
              @pool.with █
            end
            # 直接调用
            def method_missing(name, *args, █)
              @pool.with do |connection|
                connection.send(name, *args, █)
              end
            end
        end
    end
    
    sessioned = Rack::Session::Pool.new(App.new)
    run sessioned

    然后在sinatra关联的代码中可以这样使用

    DB.query("SELECT now()").fetch_row
    DB.with { |conn| … }

    对于同样使用sinatra开发的朋友,不妨也试试。

    © 2013, 深夜的蚊子. 版权所有. 如转载,请注明:转载自 蚊子空间[http://www.wenzizone.cn]

    相关文章:

    1. mysql-proxy安装[原创]
    2. FreeBSD下安装mysql-zrm客户端[技术]
    3. mysql清理binlog[技术]
    4. mysql主从复制错误解决一例



沪ICP备19023445号-2号
友情链接