快速版本(對於那些熟悉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文件,事情出錯。
那麼是什麼給?
您是否確定ENV ['RACK_ENV']'設置正確,因爲如果沒有找到'Rails',那麼'Mongoid.load!'會使用它。env' – rubish
@Rubish:我嘗試使用'set:environment,:development'使用Sinatra;應該已經做到了,對吧? –
@Rubish:哇,讓我目瞪口呆!我將代碼從'set:environment'改爲顯式設置'ENV ['RACK_ENV']',並且它工作正常!你如何將這個評論變成一個答案,所以你可以得到一些代表點? ;) –