我已经部署了自己的mongodb群集。我有一个运行的流星应用程序,该应用程序正在nginx顶部运行。在更新nginx配置文件中的连接字符串之后,我会遇到以下错误:
/<app_directory>/bundle/programs/server/node_modules/fibers/future.js:280
throw(ex);
^
Error: missing delimiting slash between hosts and options
at module.exports (/<app_directory>bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/url_parser.js:37:11)
at connect (/<app_directory>/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/mongo_client.js:289:16)
at Function.MongoClient.connect (/<app_directory>/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/mongo_client.js:113:3)
at new MongoConnection (packages/mongo/mongo_driver.js:175:11)
at new MongoInternals.RemoteCollectionDriver (packages/mongo/remote_collection_driver.js:4:16)
at Object.<anonymous> (packages/mongo/remote_collection_driver.js:38:10)
at Object.defaultRemoteCollectionDriver (packages/underscore.js:784:19)
at new Mongo.Collection (packages/mongo/collection.js:99:40)
at AccountsServer.AccountsCommon (packages/accounts-base/accounts_common.js:23:18)
at new AccountsServer (packages/accounts-base/accounts_server.js:18:5)
当连接字符串以下格式之前,该应用程序运行良好:
passenger_env_var MONGO_URL mongodb://db_user:db_password@host_name:port_no/db_name;
,但是当我尝试通过以下方式更新连接字符串时,它开始显示错误:
passenger_env_var MONGO_URL mongodb://db_user:'password_with_special_character'@host1_name:port_no,host2_name:port_no/db_name?replicaSet=replica_set_name;
连接字符串或任何其他问题有什么问题?
这不是乘客的问题,它在配置时只会在字符串上传递。通常,您会用:
的引号将整个字符串包围passenger_env_var MONGO_URL 'mongodb://db_user:password_with_special_character@host1_name:port_no,host2_name:port_no/db_name?replicaSet=replica_set_name;'
问题是Mongo客户端需要了解字符串,这意味着您需要使用它支持的逃逸机制,例如URL编码。例如,如果密码包含@
,则可以用%40
进行编码:
# password = p@ssword, @ = url encoded as %40
passenger_env_var MONGO_URL 'mongodb://username:p%40ssword@host:port/dbname';
您可以在此处查看其他特殊字符的默认URL编码。