ruby-on-rails - MongoDB 不会使用 Mongoid 连接到 MongoHQ

标签 ruby-on-rails ruby-on-rails-3 mongodb mongoid mongohq

我刚刚开始了一个全新的 Rails 项目,我要完成的第一个任务是创建一个对象并将其保存在我的数据库中。我经历了生成对象的自动化方式,在本例中是一个 URL 对象,如下所示:

rails generate scaffold Url domain:string

我还测试了两个单独的 mongoid.yml 配置设置。第一个如下:

development:
  sessions:
    default:
      # Defines the name of the default database that Mongoid can connect to.
      # (required).
      uri: mongodb://[username]:[password]@flame.mongohq.com:27046/[database]

      options:
        consistency: :strong 

此配置的结果是,当发生查询时,出现以下错误:

The operation: #<Moped::Protocol::Query
  @length=39
  @request_id=5
  @response_to=0
  @op_code=2004
  @flags=[]
  @full_collection_name=".urls"
  @skip=0
  @limit=0
  @selector={}
  @fields=nil>
 failed with error 13075: "db name can't be empty"

我还使用以下配置进行了测试:

development:
  uri: mongodb://[username]:[password]@flame.mongohq.com:27046/[database]

当代码到达 urls_controller 的创建方法时,它在@url.save 失败并出现以下错误:

mongoid (3.0.0.rc) lib/mongoid/sessions/factory.rb:100:in `parse'
mongoid (3.0.0.rc) lib/mongoid/sessions/factory.rb:61:in `create_session'
mongoid (3.0.0.rc) lib/mongoid/sessions/factory.rb:43:in `default'
mongoid (3.0.0.rc) lib/mongoid/sessions.rb:109:in `default'
mongoid (3.0.0.rc) lib/mongoid/sessions.rb:354:in `__session__'
mongoid (3.0.0.rc) lib/mongoid/sessions.rb:199:in `mongo_session'
mongoid (3.0.0.rc) lib/mongoid/sessions.rb:157:in `collection'
mongoid (3.0.0.rc) lib/mongoid/sessions.rb:25:in `collection'
mongoid (3.0.0.rc) lib/mongoid/persistence/operations.rb:26:in `collection'
mongoid (3.0.0.rc) lib/mongoid/persistence/operations/insert.rb:27:in `block in persist'
mongoid (3.0.0.rc) lib/mongoid/persistence/insertion.rb:25:in `block (2 levels) in  prepare'
activesupport (3.2.3) lib/active_support/callbacks.rb:403:in `_run__2492706777632263523__create__3276423133299307975__callbacks'
activesupport (3.2.3) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.3) lib/active_support/callbacks.rb:385:in `_run_create_callbacks'
activesupport (3.2.3) lib/active_support/callbacks.rb:81:in `run_callbacks'
mongoid (3.0.0.rc) lib/mongoid/callbacks.rb:95:in `run_callbacks'
mongoid (3.0.0.rc) lib/mongoid/persistence/insertion.rb:24:in `block in prepare'
activesupport (3.2.3) lib/active_support/callbacks.rb:403:in  `_run__2492706777632263523__save__3276423133299307975__callbacks'
activesupport (3.2.3) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.3) lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
activesupport (3.2.3) lib/active_support/callbacks.rb:81:in `run_callbacks'
mongoid (3.0.0.rc) lib/mongoid/callbacks.rb:95:in `run_callbacks'
mongoid (3.0.0.rc) lib/mongoid/persistence/insertion.rb:23:in `prepare'
mongoid (3.0.0.rc) lib/mongoid/persistence/operations/insert.rb:26:in `persist'
mongoid (3.0.0.rc) lib/mongoid/persistence.rb:49:in `insert'
mongoid (3.0.0.rc) lib/mongoid/persistence.rb:188:in `upsert'
app/controllers/urls_controller.rb:46:in `block in create'

我的假设是我的 mongoid.yml 文件不正确,但我不确定如何让它工作。有什么想法吗?

最佳答案

这就是我的生产 mongoid.yml 的样子

<% if ENV['MONGOLAB_URI'] %>
  <% uri = URI.parse(ENV['MONGOLAB_URI']) %>
production:
  <<: *defaults
  sessions:
    default:
      <<: *default_session
      database: <%= uri.path.sub('/','') %>
      username: <%= uri.user %>
      password: <%= uri.password %>
      hosts:
        - <%= uri.host %>:<%= uri.port %>
<% end %>

这对我有用

关于ruby-on-rails - MongoDB 不会使用 Mongoid 连接到 MongoHQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10801977/

相关文章:

ruby-on-rails - 为什么花括号 on Rails 回调?

ruby-on-rails - 如何在生产模式下运行redis服务器和juggernaut服务器

ruby-on-rails - PG::ConnectionBad:连接到套接字 "/var/run/postgresql/.s.PGSQL.5432"上的服务器失败:没有这样的文件或目录

python - 我应该如何附加到 mongodb 中的小文件状对象?

python - 将项目插入 MongoDb 后,如何获取其 ObjectID?

ruby-on-rails - 在 Rails 中播种外键?

javascript - Asset Pipeline 仅编译 Javascript 文件

ruby-on-rails - Rails 的问题包括查询

ruby-on-rails - 在 Rails 3 中通过关联使用 has_many 防止孤立对象

mongodb - spring-data-mongo,如何从 mongo 返回保存的对象的 _id ?