Я, вероятно, провел больше времени, чем я должен в этом.
Я использую героку для развертывания php & приложение mongodb.
Heroku mLab предоставляет переменную env MONGODB_URI, доступную в php через getenv (‘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;
Таким образом, вопрос в том, могу ли я как-нибудь использовать строку MONGODB_URI по умолчанию в heroku, или мне нужно parse_uri, а затем отдельно передать php.
Сначала вам нужно понять, что такое строка «mongodb: // localhost: 27017». Это в основном говорит водителям подключаться к серверу mongodb, работающему на локальном хосте через порт 27017 без аутентификации. Это довольно просто. Теперь heroku управляет вашей базой данных, которая размещена на отдельном сервере и требует авторизации, поэтому новый код должен быть
$client = new MongoDB\Client("mongodb://<dbuser>:<dbpassword>@dsxxxxxx.mlab.com:31899/heroku_lxxxxxx");
Теперь сказанное выше снова неверно, потому что имя пользователя и пароль или даже хост могут измениться в будущем, и вы не хотите вносить изменения в кодовую базу только из-за этого. Вот почему переменные среды приходят на помощь. использовать php getenv
способ получить строку из экземпляра heroku. Я не знаю точное имя переменной, но вы можете получить его из документации и, наконец, передать эту строку при инициализации драйверов mongodb.
Просто заметил, что вы упомянули MONGODB_URI
в вопросе, так что код будет
$mongoHost = getenv('MONGODB_URI');
$client = new MongoDB\Client($mongoHost);
Других решений пока нет …