我使用mysql2/em
类型从EventMachine代码查询我的数据库:
database.query("select * from `mytable`").callback {|rows|
...
}
通常我会使用rows.foreach
方法迭代生成的行。但是现在我需要在某个事件发生时“按需”迭代行。类似的东西:
row = rows.get_next
这可能吗?
答案 0 :(得分:0)
在我的事件机器项目中,当我需要数据库连接时,我使用ActiveRecord,因此抽象层的工作方式与Rails相同
这是一个使用bundler
的简单示例# A sample Gemfile
source "https://rubygems.org"
# gem "rails"
gem 'eventmachine'
gem 'activerecord'
gem 'mysql2'
adapter: mysql2
encoding: utf8
reconnect: false
database: bd_coop
pool: 5
username: sps_admin
password: sps_admin_db
host: localhost
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"]
)
class Model < ActiveRecord::Base
self.table_name = "model"
end
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
}
答案 1 :(得分: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
}
}