标签: moped

Heroku&MongoHQ:ActionView :: Template :: Error(操作:#<Moped :: Protocol :: Commands :: Authenticate失败,错误"auth failed")

我有一个带有MongoID 3的Rails 3应用程序成功部署到Heroku(使用MongoHQ) - 但后来发生了一些事情(无法确切地指出它是什么)并且构建开始在Heroku上崩溃.

所以这是我得到的错误:

TLDR: Moped::Errors::AuthenticationFailure (The operation: #<Moped::Protocol::Commands::Authenticate ... failed with error "auth fails")

使调试更加困难的原因是它在localhost上运行得很好.现在我的想法已经不多了.

app[web.1]: >> Thin web server (v1.4.1 codename Chromeo)
app[web.1]: >> Maximum connections set to 1024
app[web.1]: >> Listening on 0.0.0.0:58731, CTRL+C to stop
heroku[web.1]: State changed from starting to up
app[web.1]: 
app[web.1]: 
app[web.1]: Started GET "/" for 212.86.9.90 at 2012-07-31 08:08:07 +0000
heroku[router]: GET cool-name-123.herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=171ms status=200 bytes=1286
heroku[router]: GET cool-name-123.herokuapp.com/assets/application-8e7bfeeffc9291864e5b42d908c2fdda.css dyno=web.1 queue=0 wait=0ms service=11ms status=200 bytes=92524
heroku[router]: GET …
Run Code Online (Sandbox Code Playgroud)

heroku mongoid mongohq ruby-on-rails-3 moped

22
推荐指数
1
解决办法
2872
查看次数

Rails Mongoid无法进行身份验证 - 失败,错误13:"未授权查询my_db.my_collection"

据说这个问题已解决了最新版本的轻便摩托车但仍然在我身上发生.我有一个带有Mongoid的rails 4.2应用程序,为具有readWritedbOwner角色的MongoDB DB创建了一个用户,并在mong.conf文件中设置了auth = true. 我可以使用Mongo shell或使用Mongo驱动程序的简单Java应用程序,使用该用户凭据对数据库执行任何操作. 但是,当尝试使用Mongoid进行身份验证时,我总是会收到此错误:

失败,错误13:"未授权查询my_db.my_collection"

这是我的mongoid.yml文件的相关部分:

production:
  # Configure available database sessions. (required)
  sessions:
    # Defines the default session. (required)
    default:
      # Defines the name of the default database that Mongoid can connect to.
      # (required).
      database: my_db
      hosts:
              - localhost:27017
      username: my_username
      password: my_password
Run Code Online (Sandbox Code Playgroud)

我也尝试用服务器的远程地址替换主机并远程访问它(这与禁用的身份验证选项一起使用)没有成功.为了它的价值,我可以通过调试mpped/node.rb文件看到凭证,在ensure_connected方法中我看到@credentials变量包含我的用户名和密码我在这里缺少什么?谢谢!

ruby-on-rails mongodb nosql mongoid moped

12
推荐指数
1
解决办法
2659
查看次数

如何使用mongoid/moped进行upsert/push

我正在使用Mongoid(v3)来访问MongoDB,并希望执行此操作:

db.sessionlogs.update( 
    {sessionid: '12345'}, /* selection criteria */
    {'$push':{rows: "new set of data"}},  /* modification */
    true /* upsert */
);
Run Code Online (Sandbox Code Playgroud)

这在mongo shell中工作正常.它也正是我想要的,因为它是一个单一的原子操作,对我来说很重要,因为我会调用它.我不想做两个操作 - 获取然后更新.我通过mongoid尝试了很多东西,但无法让它工作.

如何将MongoID取出并将此命令发送到MongoDB?我猜测在Moped级别有一些方法可以做到这一点,但该库的文档基本上不存在.

ruby mongodb mongoid mongoid3 moped

9
推荐指数
1
解决办法
4002
查看次数

使用Sidekiq处理作业时出现Mongoid/Moped错误

在运行Sidekiq时,我看到大量的工作失败,这些工作都与我的Mongo数据库的连接问题有关.我压力测试机器有很多负载,所以我排队了18,000多个工作,失败时重试5秒.一些工作(我猜测那些能够成功检索连接线程的工作者)工作得很好.然后我有很多其他人有这样的错误:

2013-12-26T19:25:35Z 13447 TID-m2biw WARN: {"retry"=>true, "queue"=>"default",
"class"=>"ParseFileWorker", "args"=>[{"filename"=>"/opt/media/AE-67452_36.XML"}], 
"jid"=>"5d6c48fa94ed8c8da1b226fc", "enqueued_at"=>1388084903.6113343, 
"error_message"=>"Could not connect to a primary node for replica set #
<Moped::Cluster:44552140 @seeds=[<Moped::Node resolved_address=\"127.0.0.1:27017\">]>", 
"error_class"=>"Moped::Errors::ConnectionFailure", "failed_at"=>"2013-12-26T19:16:25Z", 
"retry_count"=>3, "retried_at"=>2013-12-26 19:25:35 UTC}
Run Code Online (Sandbox Code Playgroud)

还有超时错误,如下所示:

Timeout::Error: Waited 0.5 sec
Run Code Online (Sandbox Code Playgroud)

注意,我正在运行Rails 4,并在https://github.com/mongoid/mongoid中从主分支中检出Mongoid代码.根据我的阅读,以前版本的Mongoid需要在Sidekiq作业完成处理时明确关闭连接.Mongoid 4应该自动完成.我无法确认它是否正在这样做.当作业排队太快,连接不可用或超时时,问题似乎是两倍.一些工人成功地打开了连接.有些工作必须等到重试解析.

我不完全确定这里最好的解决方案是什么.如果我慢慢排队工作,一切正常.不幸的是,这不是应用程序在现实世界中的运作方式.

我如何确保我的sidekiq作业获得完成工作所需的Moped/Mongoid连接,或者等待其中一个可用于处理?由于这个问题,看到了大量的例外/错误.下面是常见错误的堆栈跟踪:

2013-12-26T20:56:58Z 1317 TID-i70ms ParseFileWorker JID-0fc375d8fd9707e7d3ec3238 INFO: fail: 1.507 sec
2013-12-26T20:56:58Z 1317 TID-i70ms WARN: {"retry"=>true, "queue"=>"default", "class"=>"ParseFileWorker", "args"=>[{"filename"=>"/opt/media/AC-19269_287.XML"}], "jid"=>"0fc375d8fd9707e7d3ec3238", "enqueued_at"=>1388091410.0421875, "error_message"=>"Waited 0.5 sec", "error_class"=>"Timeout::Error", "failed_at"=>2013-12-26 20:56:58 UTC, "retry_count"=>0}
2013-12-26T20:56:58Z 1317 TID-i70ms WARN: Waited 0.5 sec
2013-12-26T20:56:58Z 1317 TID-i70ms …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mongodb mongoid sidekiq moped

9
推荐指数
1
解决办法
2734
查看次数

Moped :: Errors :: OperationFailure失败,错误"没有这样的cmd

我最近使用rails 3.2.12和ruby 1.9.3从mongoid 2.0.2升级到mongoid 3.

Following issue comes when save command excutes => @new_node.save


  Moped::Errors::OperationFailure (The operation: #<Moped::Protocol::Command
      @length=366
      @request_id=30
      @response_to=0
      @op_code=2004
      @flags=[:slave_ok]
      @full_collection_name="campus_dev.$cmd"
      @skip=0
      @limit=-1
      @selector={:aggregate=>"nodes", :pipeline=>[{"$match"=>{"parent_id"=>"51382df8851d1912b7000009", "_id"=>{"$ne"=>"513f24952f1feda4bc000002"}, "position"=>{"$nin"=>[nil]}}}, {"$group"=>{"_id"=>"position", "count"=>{"$sum"=>1}, "max"=>{"$max"=>"$position"}, "min"=>{"$min"=>"$position"}, "sum"=>{"$sum"=>"$position"}, "avg"=>{"$avg"=>"$position"}}}]}
      @fields=nil>
    failed with error "no such cmd"):
      app/controllers/nodes_controller.rb:37:in `create'
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mongodb mongoid ruby-on-rails-3.2 moped

8
推荐指数
1
解决办法
991
查看次数

轻便摩托车:插入后获取id

当我使用mongo-ruby-driver并插入新文档时,它返回生成的'_id':

db = MongoClient.new('127.0.0.1', '27017').db('ruby-mongo-examples')
id = db['test'].insert({name: 'example'})

# BSON::ObjectId('54f88b01ab8bae12b2000001')
Run Code Online (Sandbox Code Playgroud)

在使用Moped进行插入后,我试图获取文档的"_id":

db = Moped::Session.new(['127.0.0.1:27017'])
db.use('ruby-mongo-examples')
id = db['coll'].insert({name: 'example'})

# {"connectionId"=>15, "n"=>0, "syncMillis"=>0, "writtenTo"=>nil, "err"=>nil, "ok"=>1.0}
Run Code Online (Sandbox Code Playgroud)

我如何使用轻便摩托车获得身份证?

更新:

我也尝试使用安全模式,但它不起作用:

db = Moped::Session.new(['127.0.0.1:27017'])
db.use('ruby-mongo-examples')

db.with(safe: true) do |safe|
  id = safe['coll'].insert({name: 'example'})

  # {"connectionId"=>5, "n"=>0, "syncMillis"=>0, "writtenTo"=>nil, "err"=>nil, "ok"=>1.0}
end
Run Code Online (Sandbox Code Playgroud)

mongodb mongoid moped

6
推荐指数
2
解决办法
3436
查看次数

在mongoid上插入多个和/或嵌套字段

我在mongodb中有以下查询db,它返回我需要的内容:

 db.collection.find({field1: 2801394}, {name: 1, field2: 1, _id: 1, "field3.2801394": 1})
Run Code Online (Sandbox Code Playgroud)

注意字段3是散列,此处使用的密钥与字段1中的值相同.

如何将此查询转换为mongoid?这里有两个主要问题,我无法在线找到任何一个单独的问题:

  1. 我无法弄清楚同时拔出两个字段的语法
  2. 我找不到拔除嵌套字段的语法.

谢谢!

ruby mongodb mongoid moped

5
推荐指数
1
解决办法
3041
查看次数

更新从moped :: colllection中删除 - NoMethodError:#l.Moped :: Collection的未定义方法`update'

我是mongodb&mongoid的新手..这是一个在某些pont上的mongoid 2上的rails应用程序,后来转移到了mongoid 3

我正在尝试运行迁移,其中一个具有以下内容

Assessment.collection.update({'result_access' => {'$exist' => false}}, {'$set' =>   {'result_access' => 'all'}}, {:multi => true})
Run Code Online (Sandbox Code Playgroud)

我不确定如何为mongoid 3更新这个

mongodb mongoid ruby-on-rails-3 moped

2
推荐指数
1
解决办法
1239
查看次数

Mongoid聚合$匹配Date对象不起作用?

我有一个具有以下结构的集合中的用户文档:

{ "_id" : ObjectId( "4fb54ef46d93b33b21003951" ),
  "activities" : [ 
    { "id" : ObjectId( "4fd66f9001e7fe9f03000065" ),
      "type" : "checkin",
      "date_time_created" : Date( 1339453328000 )}, 
    { "date_time_created" : Date( 1337351732000 ),
      "date_time_updated" : Date( 1337351952635 ),
      "id" : ObjectId( "4fb65e346d93b3fe77000000" )}
  ]
}
Run Code Online (Sandbox Code Playgroud)

我可以根据日期轻松查询这些文档:

User.where( 
  :activities => { 
    '$elemMatch' => {
      :date_time_created => { '$gte' => start_date, '$lt' => end_date }
    }
  } 
).length
Run Code Online (Sandbox Code Playgroud)

根据日志:

MOPED:127.0.0.1:27017 COMMAND database = db command = {:count =>"users",:query => {"activities"=> {"$ elemMatch"=> {"date_time_created"=> {"$ gte" …

ruby ruby-on-rails mongodb moped aggregation-framework

0
推荐指数
1
解决办法
3138
查看次数