2012-05-29 59 views
3

我剛開始了一個全新的rails項目,我嘗試完成的第一個任務是創建一個對象並將其保存在我的數據庫中。我通過生成對象的自動化的方式去,在這種情況下,URL對象如下:MongoDB不會使用Mongoid連接到MongoHQ

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文件是不正確的,但我不知道如何得到這個工作。有什麼想法嗎?

+0

貌似我已經解決了這個問題... –

+1

護理來告訴我們怎麼樣?我假設你保留URI作爲@Tylers回答不被接受 – oma

回答

5

這是我的生產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 %> 

,這對我的作品

+0

我看到這個,但變量去哪裏?如(uri.path)?我把它放在我的heroku變量中,應該是哪個部分?你能說明這個變量在heroku變量中的表現嗎? – SupremeA

5

目前無法通過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

如果你想,一個人必須提供炮製了一個要點,這是否對你here

+2

感謝您的要點 – codecraig

+0

沒問題,怎麼回合upvote。 –

0

有關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