在没有.load()的情况下初始化Mongoid

时间:2015-07-30 17:05:41

标签: ruby mongodb heroku orm mongoid

我的Sinatra应用程序中有以下行:

Mongoid.load!('./config/database/mongoid.yml')

这很好,但我不想在YAML文件中保留我的连接详细信息,并将其添加到.gitignore。我希望将它们保留在ENV中。

过去我通过向YAML配置文件添加username: <%= ENV['MONGODB_USER'] %>之类的内容,然后将其作为ERB读取,保存并在Heroku擦除磁盘之前使用Mongoid.load!再次读取它来绕过这个。毋庸置疑,这非常疯狂。

我所能找到的只是.load! over here的定义,并且看起来并没有任何解决方法。

是否有一些以编程方式配置Mongoid连接的隐藏方式?

提前致谢。

2 个答案:

答案 0 :(得分:3)

mu's answer

为基础

您可以为Mongoid提供一个哈希值,用于初始化,如下所示:

<?php 
header('Content-Type: application/json');
include 'config.php';

$query = mysql_query("SELECT str_data ,occasione FROM Evento");

$arraydata = array();
$arraynome = array();

while($row = mysql_fetch_assoc($query)){
   $arraydata[] = date("m-d-Y", $row['str_data']);
   $arraynome[] = $row['occasione'];
}

$datanome = array_combine($arraydata, $arraynome);
echo json_encode($datanome);
?>

请注意,传递给data.php:1 Uncaught SyntaxError: Unexpected token : 的哈希值不会像您在Mongoid.load_configuration(clients: { default: { database: database, hosts: [ host ] } }) 中通常所拥有的环境密钥一样开始。

答案 1 :(得分:2)

Mongoid.load!并没有做太多事情:

def load!(path, environment = nil)
  settings = Environment.load_yaml(path, environment)
  if settings.present?
    Sessions.disconnect
    Sessions.clear
    load_configuration(settings)
  end
  settings
end

所有这一切都是一些簿记,加载YAML,然后交给load_configuration进行繁重的工作。没有什么可以阻止你手动构建settings哈希并自己调用Mongoid.load_configuration