快速版本(对于那些熟悉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']',并且它工作正常!你如何将这个评论变成一个答案,所以你可以得到一些代表点? ;) –