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: # failed with error 13075: "db name can't be empty" 

我还测试了以下配置:

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

当代码到达urls_controller的create方法时,它在@ 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 %> 

这对我有用

目前无法通过URI在mongoid中建立数据库连接。 mongoid.yml的格式如下:

 environment: host: <%= ENV['MONGOID_HOST'] %> port: <%= ENV['MONGOID_PORT'] %> username: <%= ENV['MONGOID_USERNAME'] %> password: <%= ENV['MONGOID_PASSWORD'] %> database: <%= ENV['MONGOID_DATABASE'] %> 

您需要做的是将MongoHQ字符串解析为其组成部分,以便在mongoid.yml中提供

如果你愿意,有人已经为你做了一个为你做这件事的要点

对于MongoHQ上的副本集/非副本集:

 production: sessions: default: <% if ENV['MONGOHQ_HOST_LIST'] %> database: <%= ENV['MONGOHQ_DATABASE'] %> username: <%= ENV['MONGOHQ_USER'] %> password: <%= ENV['MONGOHQ_PASSWD'] %> hosts: <% YAML.parse(ENV['MONGOHQ_HOST_LIST']).value.each do |v| %> - <%= "#{v[0].value}:#{v[1].value}" %> <% end %> <% elsif ENV['MONGOHQ_URL'] %> uri: <%= ENV['MONGOHQ_URL'] %> <% end %> options: consistency: :eventual safe: true