我可能在这方面花费的时间比我应该多。 我正在使用heroku来部署php& mongodb应用。
Heroku mLab通过getenv('MONGODB_URI')在php中提供env变量MONGODB_URI,其中包含标准的MongoDBURI,如:
mongodb://<dbuser>:<dbpassword>@dsxxxxxx.mlab.com:31899/heroku_lxxxxxx
已经包含现有的数据库名称,但是php mongodb库教程建议不带它的连接字符串:
$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->demo->beers;
所以问题是我可以以某种方式使用默认的heroku的MONGODB_URI字符串,或者我必须parse_uri它然后单独提供给php。
答案 0 :(得分:0)
首先,您需要了解字符串'mongodb:// localhost:27017'是什么。它基本上告诉驱动程序在没有身份验证的情况下连接到端口27017上运行在localhost上的mongodb服务器。这很简单。现在heroku管理您的数据库,该数据库托管在单独的服务器上并需要授权,因此新代码应该是
$client = new MongoDB\Client("mongodb://<dbuser>:<dbpassword>@dsxxxxxx.mlab.com:31899/heroku_lxxxxxx");
现在上面说的是错误的,因为用户名和密码甚至主机将来可能会发生变化而你不想因为这个而在代码库中进行更改。这就是为什么环境变量来拯救。使用php getenv
方法从heroku实例中获取字符串。我不知道变量的确切名称,但您可以从docs中获取该名称,并在初始化mongodb驱动程序时最终传递该字符串。
刚刚注意到你在问题中提到MONGODB_URI
所以代码是
$mongoHost = getenv('MONGODB_URI');
$client = new MongoDB\Client($mongoHost);