Tag: mongodb

在Rails中加载YAML配置文件时出错

我正在使用MongoDB配置Rails,并在配对config/mongo.yml文件时发现一个奇怪的问题。 config/mongo.yml是通过执行script/rails generate mongo_mapper:config ,如下所示: defaults: &defaults host: 127.0.0.1 port: 27017 development: <<: *defaults database: tc_web_development test: <<: *defaults database: tc_web_test 从配置文件中我们可以看到对象development和test都应该有一个database字段。 但是当它在config/initializers/mongo.db解析并加载时, config = YAML::load(File.read(Rails.root.join(‘config/mongo.yml’))) puts config.inspect MongoMapper.setup(config, Rails.env) 奇怪的是: puts config.inspect的输出是 {“defaults”=>{“host”=>”127.0.0.1”, “port”=>27017}, “development”=>{“host”=>”127.0.0.1”, “port”=>27017}, “test”=>{“host”=>”127.0.0.1”, “port”=>27017}} 它不包含database属性。 但是当我在普通的ruby控制台中执行相同的语句时,不是使用rails console , mongo.yml以正确的方式解析mongo.yml 。 {“defaults”=>{“host”=>”127.0.0.1”, “port”=>27017}, “development”=>{“host”=>”127.0.0.1”, “port”=>27017, “database”=>”tc_web_development”}, “test”=>{“host”=>”127.0.0.1”, “port”=>27017, “database”=>”tc_web_test”}} 我想知道这个问题可能是什么原因。 有任何想法吗? […]

Mongodb服务器出现故障,如何防止Rails应用程序超时?

我正在使用central_logger来存储mongodb中我们的Rails应用程序的日志。 当mongo服务器最近关闭时,我们的应用程序开始计时mongo插入。 如果mongo服务器出现故障,如何防止Rails超时?

MacOS每秒唤醒错误

构建一个Rails应用程序(ruby 2.4.0p0 / Rails 5.1.4)并使用我的Macbook air(MacOS High Sierra 10.13.2)进行本地测试,我一直遇到这个问题: 在过去的241秒内唤醒45001次(平均每秒唤醒187次),在300秒内超过每秒150次唤醒的限制 我认为这可能与我使用Mongoid(6.1.0)作为数据库的事实有关,但我不确定。 这是我第一次和Mongo一起玩。 任何关于我如何能够解决这个问题的想法将不胜感激!

压缩Ruby / Rails中的hex字符串

我正在使用MongoDB作为我正在构建的Rails应用程序的后端。 默认情况下,Mongo为其记录生成24个字符的hexID,以便更轻松地进行分片,因此我的URL看起来像: example.com/companies/4b3fc1400de0690bf2000001/employees/4b3ea6e30de0691552000001 这不是很漂亮。 我想坚持使用Rails url约定,但也要将这些ID保留在数据库中。 我认为一个愉快的折衷方案是使用更多字符将这些hex id压缩为更短的集合,因此它们看起来像: example.com/companies/3ewqkvr5nj/employees/9srbsjlb2r 然后在我的控制器中,我将反转压缩,获取原始的hexID并使用它来查找记录。 我的问题是,来回转换这些ID的最佳方法是什么? 我当然希望它们尽可能短,但也是安全且易于转换的。 谢谢!

如何在ruby中处理mongodb的E11000重复键错误

有没有在ruby中处理mongodb相关exception的好例子? 在这种情况下,我有: /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/networking.rb:89:in `send_message_with_gle’: 11000: E11000 duplicate key error index: somedb.somecoll.$_id_ dup key: { : “some_id” } (Mongo::OperationFailure) from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/collection.rb:1108:in `block in insert_documents’ from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/util/logging.rb:33:in `block in instrument’ from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/util/logging.rb:65:in `instrument’ from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/util/logging.rb:32:in `instrument’ from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/collection.rb:1106:in `insert_documents’ from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/collection.rb:375:in `insert’ from lib/tasks/getorders.rb:47:in `block in ‘ from lib/tasks/getorders.rb:25:in `each’ from lib/tasks/getorders.rb:25:in `’ 我有这个错误,因为我正在尝试插入一个已存在于mongodb数据库中的id的文档,我只是想知道如何在ruby中处理mongodb相关的exception。 例如,如果发生exception,那么我将更改散列的id,然后重新尝试插入它。 救援区怎么样?

BSON :: ObjectId vs Mongo :: ObjectID

在在线API中,它们指的是Mongo::ObjectID 。 我require ‘mongo’但仍然没有找到它。 例如,我需要通过Id找到一个对象,我正在做: mongo_db[‘post’].find({_id: Mongo::ObjectID(params[:id])}).next 它似乎无法找到Mongo :: ObjectID并导致: NoMethodError – undefined method “ObjectID’ for Mongo:Module: 所以过了一段时间我开始require ‘bson’并且正在做 mongo_db[‘post’].find({_id: BSON::ObjectId(params[:id])}).next 它工作了! 那么BSON :: ObjectId和Mongo :: ObjectID之间的区别是什么?我需要做些什么来使后者工作(我真的需要)吗? PS:我有 bson (1.5.2, 1.4.1) Authors: Jim Menard, Mike Dirolf, Kyle Banker Homepage: http://www.mongodb.org Installed at (1.5.2): /usr/local/lib64/ruby/gems/1.9.1 (1.4.1): /usr/local/lib64/ruby/gems/1.9.1 Ruby implementation of BSON mongo (1.5.2, 1.4.1) Authors: Jim […]

在Rails表单中处理MongoMapper EmbeddedDocument

首先,我是一般编程和Rails的新手。 我选择了Rails,因为它似乎是一种简单的语言。 对于我的项目,我正在使用带有Rails的MongoMapper。 我正在尝试以与文档相同的forms处理嵌入式文档。 我有以下型号: class User include MongoMapper::Document key :email, String, :required => true key :first_name, String key :last_name, String key :role, String many :addresses timestamps! end class Address include MongoMapper::EmbeddedDocument key :location, String key :street, String key :city, String key :zip, Integer key :state, String key :country, String end 我想在Document的同时创建/编辑EmbeddedDocument。 我尝试过使用fields_for: 但我明白了 #l […]

使用mongomapper在Array字段中查找包含元素的文档?

我是mongodb / mongomapper的新手,无法找到答案。 我有一个带有以下字段的mongomapper类 key :author_id, Integer key :partecipant_ids, Array 假设我有一个具有以下属性的“记录”: { :author_id => 10, :partecipant_ids => [10,15,201] } 我想要检索涉及id为15的partecipant的所有对象。 我没有在文档中找到任何提及。 奇怪的是,以前我在做这个查询 MessageThread.where :partecipant_ids => [15] 哪个工作,但在(或许)gem/ mongodb版本的一些变化后它停止工作。 不幸的是,我不知道我之前使用过哪个版本的mongodb和mongomapper。

Ruby超级不敏感的Regex,用于将学校名称与重音和其他变音符号相匹配

在其他编程语言中已经提出了这个问题,但是如何在Ruby上执行重音不敏感的正则表达式呢? 我目前的代码是这样的 scope :by_registered_name, ->(regex){ where(:name => /#{Regexp.escape(regex)}/i) } 我想也许我可以用点替换非字母数字+空格字符,并删除escape ,但是没有更好的方法吗? 如果我这样做,恐怕我能抓到奇怪的东西…… 我现在正在瞄准法语,但是如果我还可以将其修复为其他很酷的语言。 我正在使用Ruby 2.3,如果这可以帮助。 我意识到我的要求实际上有点强,我还需要捕捉像破折号等等。我基本上是导入一个学校数据库( URL在这里 ,标签是 ),我希望人们能够找到他们的学校输入名字。 搜索查询和搜索请求都可能包含重音,我相信最简单的方法是使“两者”不敏感。 “Télécom”应与“电信”相匹配 “établissement”应与“etablissement”相匹配 “Institutsenérieurnationalde l’artisanat – Chambredemétiersetde l’Artisanat en Moselle”应与“artisanat chambredemétiers”相匹配 “Ecolehôtelièred’Avignon(CCI du Vaucluse)”应与Ecole hoteliere d’avignon相匹配“(对于括号,可以跳过它) “Ecolefrançaised’hôtesses”应与“ecole francaise d’hot”相匹配 我在那个数据库中找到了疯狂的东西,我会考虑对这个输入进行消毒 “Académieinternationalede management – Hotel&Tourism Management Academy”应该与“Hotel Tourism”相匹配(请注意&实际上是用XML编写的)

Mongo :: OperationFailure – 使用from_uri时需要登录

我的目标是连接我的heroku / mongolab数据库,但我不断收到此错误: Mongo::OperationFailure at /mongotest/a/b : need to login file: networking.rb location: send_message_with_gle line: 89 我正在使用的代码是: client = Mongo::MongoClient.from_uri(ENV[‘MONGOLAB_URI’]) db = client.db(‘test’) testcoll = db[‘testcoll’] testcoll.insert({:’_id’ => “def”, :’test’ => “woop de doop”}) testcoll.find() ENV[‘MONGOLAB_URI’]=mongodb://heroku_app########:password@ds0xxxxx.mongolab.com:xxxxx/heroku_app######## 我知道uri是正确的,包含用户名和密码,为什么会出错呢? 此外,错误发生在insert()行,而不是我validation的行。