代码之家  ›  专栏  ›  技术社区  ›  Mostafiz Rahman

Phusion Passenger“错误:主机和选项之间缺少分隔斜线”连接MongoDB群集时出错

  •  1
  • Mostafiz Rahman  · 技术社区  · 8 年前

    我已经部署了自己的MongoDB集群。我有一个正在运行的Meteor应用程序,它在Nginx的顶部与Phusion Passenger一起运行。更新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.&lt;anonymous&gt; (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;
    

    但当我尝试通过以下方式更新连接字符串连接到mu mongoDB集群时,它开始显示错误:

    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;
    

    连接字符串中是否有任何错误或其他问题?

    1 回复  |  直到 8 年前
        1
  •  2
  •   OnixSO    8 年前

    这不是Passenger的问题,它只是在配置字符串时传递字符串。通常,您会用引号将整个字符串括起来,如:

    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编码 here .