Skrócona wersja (dla tych, którzy znają Mongoid & Sinatra): Jeśli to niePsyche/Syck YAML-parsowania emisyjnej, dlaczego inny mógłbym dostać ten błąd, gdy próbuje połączyć się z bazą danych MongoDB wykorzystaniem Mongoid? (A może to jest że kwestia, w tym przypadku, jak to naprawić mój plik mongoid.yml, pisał poniżej?)Dlaczego pojawia się błąd "nazwa_bazy_danych musi być ciągiem lub symbolem"?
Bardziej szczegółowe (oryginalna) wersja:
mam app Sinatra interakcji z bazy danych MongoDB poprzez Mongoid:
configure do
Mongoid.load!('config/mongoid.yml')
end
a mój plik mongoid.yml wygląda następująco:
development:
host: localhost
database: project_development
test:
host: localhost
database: project_test
production:
uri: <%= ENV['MONGOLAB_URI'] %>
Ilekroć próbuję wejść w interakcję z bazą danych w jakiś sposób, pojawia się błąd db_name musi być ciągiem lub symbolem.
Teraz znalazłem mnóstwo informacji o Google na ten temat; ale wszystko, co mogę znaleźć, zdaje się wskazywać, że problem związany jest z Ruby teraz, używając parsera Psyche YAML zamiast starego parsera Syck. Nie sądzę, że jest to istotne w moim przypadku, ponieważ, o ile wiem, powyższy YAML powinien być doskonale parsable przez którąkolwiek z nich.
(.. Na co warto, choć ja mieć próbował pomocą YAML::ENGINE.yamler= 'syck'
sztuczkę, bezskutecznie mam dokładnie ten sam komunikat o błędzie)
Kiedy zmienić konfigurację do tego:
Mongoid.configure do |config|
name = "project_development"
host = "localhost"
config.master = Mongo::Connection.new.db(name)
end
... wtedy wszystko działa poprawnie. Więc wiem, że MongoDB pracuje na mojej maszynie. Dzieje się tak zwłaszcza wtedy, gdy używam pliku YAML, że sprawy idą nie tak.
Co daje?
Czy upewniłeś się, że 'ENV ['RACK_ENV']' jest ustawione poprawnie, ponieważ to właśnie używa 'Mongoid.load!', Jeśli nie znajdzie 'Railsów.env' – rubish
@Rubish: Próbowałem użyć 'set: environment,: development' using Sinatra; to powinno być zrobione, prawda? –
@Rubish: Wow, pokoloruj mnie oszołomiony! Zmieniłem kod z 'set: environment' na jawnie ustawiający' ENV ['RACK_ENV'] 'i zadziałało! Co powiesz na zmianę tego komentarza na odpowiedź, abyś mógł zdobyć punkty rep? ;) –