0

我正在使用mysql2/em类型从 EventMachine 代码中查询我的数据库:

database.query("select * from `mytable`").callback {|rows|
    ...
}

通常我会使用方法迭代结果行rows.foreach。但是现在我需要在某个事件发生时“按需”迭代行。就像是:

row = rows.get_next

这可能吗?

4

2 回答 2

0

在我的事件机器项目中,当我需要一个数据库连接时,我使用 ActiveRecord,因此抽象层的工作方式与 Rails 相同

这是一个使用捆绑器的简单示例

宝石文件

# A sample Gemfile
source "https://rubygems.org"

# gem "rails"
gem 'eventmachine'
gem 'activerecord'
gem 'mysql2'

配置/数据库.yml

adapter: mysql2
encoding: utf8
reconnect: false
database: bd_coop
pool: 5
username: sps_admin
password: sps_admin_db
host: localhost

配置/数据库.rb

database = YAML.load_file(File.expand_path('../database.yml', __FILE__))
ActiveRecord::Base.establish_connection(
  :adapter => database["adapter"],
  :database => database["database"],
  :password => database["password"],
  :host => database["host"],
  :username => database["username"]
)

库/模型.rb

class Model < ActiveRecord::Base

  self.table_name = "model"

end

库/服务器.rb

require "active_record"
require File.expand_path('../../config/db_connection', __FILE__)

module EchoServer
  def receive_data data
     Model.create(:data => data)
     send_data Model.all
  end

end


EventMachine.run {
    puts "Server started"
    EventMachine.start_server "0.0.0.0", 8082, EchoServer
}
于 2013-11-06T16:14:04.750 回答
0

这是我想出的:

EM.run {
  database.query('select * from mytable').callback {|rows|
    e = rows.to_enum

    loop {
      p e.next
    }
    EM.stop
  }.errback {|e|
    p e
    EM.stop
  }
}
于 2013-11-06T17:11:02.323 回答