2011-08-13 67 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。

相关问题