Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Rails 3.0和Mongo 1.4.0时出现连接错误_Ruby On Rails_Ruby_Mongodb - Fatal编程技术网

Ruby on rails 使用Rails 3.0和Mongo 1.4.0时出现连接错误

Ruby on rails 使用Rails 3.0和Mongo 1.4.0时出现连接错误,ruby-on-rails,ruby,mongodb,Ruby On Rails,Ruby,Mongodb,我创建了一个库,它将从Rails应用程序向MongoDB记录事件。我使用的是MongoGem的1.4.0版和Rails3.0w/Ruby1.8.7。有关守则如下: def new_event(collection, event) @conn = Mongo::Connection.new("localhost", 27017, :pool_size => 5, :pool_timeout => 5) @conn.db("event").collection(collectio

我创建了一个库,它将从Rails应用程序向MongoDB记录事件。我使用的是MongoGem的1.4.0版和Rails3.0w/Ruby1.8.7。有关守则如下:

def new_event(collection, event)
  @conn = Mongo::Connection.new("localhost", 27017, :pool_size => 5, :pool_timeout => 5)
  @conn.db("event").collection(collection).insert(event)
  @conn.close
end
这对于记录网站上发生的新事件非常有效。但是,我还需要用旧事件回填数据库。因此,我正在运行一个脚本,基本上实现了这一点:

SomeModel.find_each do |model|
  Tracker.new.new_event("model_event", { ... info from model ... })
end
我正试着按照5万个事件的顺序回填一些东西。在脚本运行时,我看到以下内容:

Tue Sep 27 23:45:20 [initandlisten] waiting for connections on port 27017
Tue Sep 27 23:46:20 [clientcursormon] mem (MB) res:12 virt:78 mapped:0
Tue Sep 27 23:48:49 [initandlisten] connection accepted from 127.0.0.1:51006 #1
Tue Sep 27 23:49:03 [conn1] remove event.application 103ms
Tue Sep 27 23:49:12 [conn1] remove event.listing 127ms
Tue Sep 27 23:49:20 [clientcursormon] mem (MB) res:37 virt:207 mapped:128
Tue Sep 27 23:51:44 [initandlisten] connection accepted from 127.0.0.1:48103 #2
Tue Sep 27 23:51:44 [conn2] end connection 127.0.0.1:48103
Tue Sep 27 23:51:44 [initandlisten] connection accepted from 127.0.0.1:48104 #3
Tue Sep 27 23:51:44 [conn3] end connection 127.0.0.1:48104
Tue Sep 27 23:51:44 [initandlisten] connection accepted from 127.0.0.1:48105 #4
Tue Sep 27 23:51:44 [conn4] end connection 127.0.0.1:48105
Tue Sep 27 23:51:44 [initandlisten] connection accepted from 127.0.0.1:48106 #5
Tue Sep 27 23:51:44 [conn5] end connection 127.0.0.1:48106
端口(127.0.0.1:XXXXX)和(我假设是)连接池一直在增加,直到我最终从ruby脚本中得到这个异常:

Failed to connect to a master node at localhost:27017
/var/bundler/turtle/ruby/1.8/gems/mongo-1.4.0/lib/../lib/mongo/connection.rb:526:in `connect'
/var/bundler/turtle/ruby/1.8/gems/mongo-1.4.0/lib/../lib/mongo/connection.rb:688:in `setup'
/var/bundler/turtle/ruby/1.8/gems/mongo-1.4.0/lib/../lib/mongo/connection.rb:104:in `initialize'

刚刚找到解决办法。我需要将connection对象设置为类变量,以便在Tracker类的所有实例中共享它

@@conn = Mongo::Connection.new("localhost", 27017, :pool_size => 5, :pool_timeout => 5)
def self.new_event(collection, event)
  @@conn.db("event").collection(collection).insert(event)
end

刚刚找到解决办法。我需要将connection对象设置为类变量,以便在Tracker类的所有实例中共享它@@conn=Mongo::Connection.new(“localhost”,27017,:pool_size=>5,:pool_timeout=>5)def self.new_事件(集合,事件)@@conn.db(“事件”).collection(集合).insert(事件)end`