2013-05-13 49 views
1

config/mongoid.yml文件中看不到identity_map設置。Mongoid Identity Map設置在Rails控制檯中不起作用

這裏的文件:

development: 
    sessions: 
    default: 
     uri: mongodb://localhost:27017/test_development 
     options: &defaultopts 
     op_timeout: 60 
     allow_dynamic_fields: false 
     identity_map_enabled: true 
     preload_models: true 
     raise_not_found_error: false 

當這是通過RAILS_ENV=development rails console跑地圖未開啓:

$ RAILS_ENV=development rails c 
Loading development environment (Rails 3.2.13) 
[1] pry(main)> Mongoid.using_identity_map? 
=> false 
[2] pry(main)> Mongoid.identity_map_enabled? 
=> false 

即使嘗試手動加載Mongoid和文件都不會改變:

[3] pry(main)> require 'mongoid' 
=> false 
[4] pry(main)> Mongoid.load!("./config/mongoid.yml") 
=> {"sessions"=> 
    {"default"=> 
    {"uri"=>"mongodb://localhost:27017/test_development", 
    "options"=> 
     {"op_timeout"=>60, 
     "allow_dynamic_fields"=>false, 
     "identity_map_enabled"=>true, 
     "preload_models"=>true, 
     "raise_not_found_error"=>false}}}} 
[5] pry(main)> Mongoid.using_identity_map? 
=> false 
[6] pry(main)> Mongoid.identity_map_enabled? 
=> false 

僅當我手動設置值時纔會生效:

[8] pry(main)> Mongoid.identity_map_enabled = true 
=> true 
[9] pry(main)> Mongoid.using_identity_map?                                                  
=> true 
[10] pry(main)> Mongoid.identity_map_enabled? 
=> true 

爲什麼設置未正確加載?

這個問題發生在使用Rails 3.2.13和Mongoid 3.1.2。

回答

1

:options不應嵌套在:default中。 Mongoid期待看到mongoid.yml格式:

development: 
    sessions: 
    default: 
     uri: mongodb://localhost:27017/test_development 
    options: 
    op_timeout: 60 
    allow_dynamic_fields: false 
    identity_map_enabled: true 
    preload_models: true 
    raise_not_found_error: false 

source其中:options被加載。

$ pry 
[1] pry(main)> require 'mongoid' 
=> true 
[2] pry(main)> Mongoid.load!("./mongoid.yml", :production) 
=> {"sessions"=> 
    {"default"=>{"database"=>"mongoid_prod", "hosts"=>["localhost:27017"]}}, 
    "options"=>{"identity_map_enabled"=>true, "include_root_in_json"=>true}} 
[3] pry(main)> Mongoid.using_identity_map? 
=> true 
[4] pry(main)> 

編輯: 正如指出的@cbmanica,有多個地方options可以設置。例如,我們可以有:

development: 
    sessions: 
    default: 
     uri: mongodb://localhost:27017/test_development 
     options: 
     consistency: :strong 
    options: 
    op_timeout: 60 

對於那些MongoDB的數據庫上設置的options,它們不能被嵌套的session內。查看defaults的來源。

+0

Mongoid文檔似乎直接違背了你的斷言:':options'不應該嵌套在':default'中:http://mongoid.org/en/mongoid/docs/installation.html。 – cbmanica 2013-05-30 23:04:21

+0

@cbmanica有多種選項可以設置,我編輯我的答案突出顯示。在[documentation](http://mongoid.org/en/mongoid/docs/installation.html)中查看「Mongoid配置剖析」部分,瞭解多個選項設置的多個選項的示例。 – jwieringa 2013-05-31 23:57:16

相關問題