2011-08-13 95 views
12

快速版本(對於那些熟悉Mongoid & Sinatra:如果這是Psyche/Syck YAML的解析問題,爲什麼否則我可能會嘗試連接到使用Mongoid MongoDB數據庫時,這個錯誤? (或者,也許這是問題,在這種情況下,我該如何解決我mongoid.yml文件,貼在下面?)爲什麼我會收到錯誤「db_name必須是字符串或符號」?


更詳細的(原)版本:

我有一西納特拉的應用程序通過Mongoid與MongoDB數據庫進行交互:

configure do 
    Mongoid.load!('config/mongoid.yml') 
end 

而且我mongoid.yml文件看起來像這樣:

development: 
    host: localhost 
    database: project_development 

test: 
    host: localhost 
    database: project_test 

production: 
    uri: <%= ENV['MONGOLAB_URI'] %> 

每當我嘗試以某種方式與數據庫進行交互時,出現錯誤db_name必須是字符串或符號

現在,我發現很多谷歌上的信息關於此;但是我能找到的所有東西似乎都表明這個問題與Ruby現在使用Psyche YAML解析器而不是舊的Syck解析器有關。我不認爲這在我的情況下是相關的,因爲據我所知,上面的YAML應該可以完全解析。

(。對於它的價值,不過,我使用YAML::ENGINE.yamler= 'syck'伎倆,但沒有成功嘗試,我得到了完全相同的錯誤消息)

當我改變配置,以這樣的:

Mongoid.configure do |config| 
    name = "project_development" 
    host = "localhost" 
    config.master = Mongo::Connection.new.db(name) 
end 

...然後一切正常。所以我知道MongoDB正在使用我的機器。這是特別是當我使用YAML文件,事情出錯。

那麼是什麼給?

+1

您是否確定ENV ['RACK_ENV']'設置正確,因爲如果沒有找到'Rails',那麼'Mongoid.load!'會使用它。env' – rubish

+0

@Rubish:我嘗試使用'set:environment,:development'使用Sinatra;應該已經做到了,對吧? –

+0

@Rubish:哇,讓我目瞪口呆!我將代碼從'set:environment'改爲顯式設置'ENV ['RACK_ENV']',並且它工作正常!你如何將這個評論變成一個答案,所以你可以得到一些代表點? ;) –

回答

10

確保ENV['RACK_ENV']設置正確,因爲如果它沒有找到Rails.env,那麼Mongoid.load!會使用它。

0

我有同樣的問題護欄及解決它以這樣的方式

問題出在Mongoid和MongodbLogger的有關mongoid.yml的結構不同的期望。 短:只需添加數據庫除了在上層:

development: 
    sessions: 
    default: 
     database: apollo_development      <<<< for the rest 
     hosts: 
     - localhost:27017 
     options: 
     consistency: :strong 
    database: apollo_development       <<<<main level for logger 
    .... more stuff for the logger 

的好處是,你可以使用你的數據的數據庫,另一個用於記錄。 技術有兩個使用yml的獨立系統:記錄器和MongoId。

相關問題