2013-03-12 6 views
9

Stworzyłem aplikację do montowania w Railsach i dodałem kamienie "mongoid" i "rspec". Gdy próbuję uruchomić moje specyfikacje teraz pojawia się następujący błąd:Rails Engine + Mongoid: Nie znaleziono konfiguracji dla sesji o nazwie "default"

Mongoid::Errors::NoSessionConfig: 
Problem: 
    No configuration could be found for a session named 'default'. 
Summary: 
    When attempting to create the new session, Mongoid could not find a session configuration for the name: 'default'. This is necessary in order to know the host, port, and options needed to connect. 
Resolution: 
    Double check your mongoid.yml to make sure under the sessions key that a configuration exists for 'default'. If you have set the configuration programatically, ensure that 'default' exists in the configuration hash. 

Kiedy dodać linię Mongoid.load!(Rails.root.join("config", "mongoid.yml")) do spec_helper.rb wszystko działa normalnie.

Dlaczego tak jest i jak mogę uzyskać taką funkcjonalność, jak w normalnej aplikacji Railsowej, w której nie trzeba wywoływać funkcji ładowania?

mongoid.yml

development: 
    sessions: 
    default: 
     database: dummy_development 
     hosts: 
     - localhost:27017 
     options: 
    options: 
test: 
    sessions: 
    default: 
     database: dummy_test 
     hosts: 
     - localhost:27017 
     options: 
     consistency: :strong 
     max_retries: 1 
     retry_interval: 0 

Wersje:

gem 'rails', '~> 3.2.12' 
gem 'mongoid', '~> 3.1' 
gem 'rspec-rails', '~> 2.13' 
+0

Możesz opublikować plik mongoid.yml? –

Odpowiedz

19

pewnie brakowało require 'rails/mongoid' w pliku spec_helper.rb.

Gdyby ktoś ma ten sam problem tutaj https://github.com/mongoid/mongoid/issues/2894#issuecomment-14903927

warto dodać, że wymagają, że powinien to naprawić.

+0

Gdzie znajdę plik 'spec_helper.rb'? –

+0

Znalazłem w przykładowym projekcie 'Echo' dla mongoid + rails i nie miałem folderu' spec' w wygenerowanym folderze aplikacji –

+2

spec_helper.rb jest generowany przez rspec, jeśli nie używasz rspec, to umieść na swojej aplikacji.rb –

2

i zrestartuj serwer po dokonaniu zmian mongoid.yml

4

Jest to prawdopodobnie z powodu dwóch jednoczesnych warunków: (nie ma sekcji produkcja w mongoid.yml) i (Heroku traktuje aplikacje Rails jak produkcja domyślnie) .

Naprawianie jeden wystarczy.

1. Nie ma przekrój produkcji w mongoid.yml

Dodaj sekcji produkcyjnych do mongoid.yml, jak wyjaśniono w Heroku np

production: 
    sessions: 
    default: 
     uri: <%= ENV['MONGOHQ_URL'] %> 
     options: 
     skip_version_check: true 
     safe: true 

2. Heroku traktuje jak produkcja szyn aplikacje domyślnie

zestaw Heroku środowisko do rozwoju, lub dodać nowe środowisko, które byłyby specyficzne dla Heroku, jak wyjaśniono w Heroku, na przykład

heroku config:set RACK_ENV=development RAILS_ENV=development --remote development 
0

Znalazłem tej pracy - zauważył nie ma „sesje”, tylko „klientów”

production: 
    clients: 
    default: 
     uri: <%= ENV['MONGODB_URI'] %> 
     options: 
     skip_version_check: true 
     safe: true 
2

ten pracował dla mnie na moim komputerze

1: Dodaj do Twoich config/application.rb

Mongoid.load!("path to your mongoid.yml") 

2: I zmień swojego mongoida.yml od na przykład (tylko dla wersji < mongoid 5):

Ten

development: 
    clients: 
    default: 
     database: database_for_development 
     hosts: 
      - localhost:27017 
test: 
    clients: 
    default: 
     database: database_for_test 
     hosts: 
      - localhost:27017 
production: 
    clients: 
    default: 
     database: database_for_production 
     hosts: 
      - localhost:27017 

Do:

development: 
    sessions: 
    default: 
     database: database_for_development 
     hosts: 
      - localhost:27017 
test: 
    sessions: 
    default: 
     database: database_for_test 
     hosts: 
      - localhost:27017 
production: 
    sessions: 
    default: 
     database: database_for_production 
     hosts: 
      - localhost:27017 
Powiązane problemy