2013-05-13 2 views
1

identity_map 설정이 config/mongoid.yml 파일에서 선택되는 것으로 나타나지 않습니다.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을 통해 실행되는지도가 켜져되지 않습니다 : 여기에

파일의 수동 Mongoid를로드

$ 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 

도 시도하고 파일은 변경되지 않습니다 :

[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 

:options가로드되는 source를 참조하십시오.

$ 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)> 

편집 : 으로는 options가 설정 될 수있는 여러 장소가, @cbmanica에 의해 지적했다. 예를 들어, 우리는 할 수 다음 MongoDB를 데이터베이스에 설정된 options를 들어

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

, 그들이 session의 내부에 중첩 될 수 없습니다. defaults의 출처를 참조하십시오.

+0

몽고이 문서는': default'가': default'에 중첩되어서는 안된다는 당신의 주장과 직접적으로 모순되는 것으로 보입니다 : http://mongoid.org/en/mongoid/docs/installation.html. – cbmanica

+0

@cbmanica 설정할 수있는 여러 옵션이 있으며,이를 강조하기 위해 내 대답을 편집했습니다. [documentation] (http://mongoid.org/en/mongoid/docs/installation.html)에서 여러 키에 여러 옵션을 설정하는 예를 보려면 "몽고 이드 구성 분석"섹션을 살펴보십시오. – jwieringa