2017-12-14 28 views
2

MongoDB 클러스터를 직접 배포했습니다. Nginx 상단에 Phusion Passenger로 실행중인 Meteor 애플리케이션이 실행 중입니다. 연결 문자열은 이전에 형식을 다음에있을 때Phong Passenger MongoDB 클러스터 연결 중 "호스트와 옵션 사이에 구분선이 없습니다."오류가 발생했습니다.

/<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) 

응용 프로그램이 잘 실행되었습니다 : 내가 Nginx에 구성 파일에 연결 문자열을 업데이트 한 후 다음과 같은 오류를 받고 있어요

passenger_env_var MONGO_URL mongodb://db_user:[email protected]_name:port_no/db_name; 

을하지만 보여주는 오류를 시작합니다 나는 다음과 같은 방법으로 연결 문자열을 업데이트하여 무 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

그래서 특수 문자를 이스케이프해도 실행되지 않습니까? 또한 문자열은 86 자이며 새로운 문자는 156 자입니다. 라인 길이가이 값들 사이의 값으로 제한되어있을 수 있습니까? – Jankapunkt

+0

해당 특수 문자를 이스케이프 처리하지 않았습니다. 동일한 연결 문자열이 PM2가있는 다른 VM에서 작동하지만 Phusion Passanger와 작동하지 않습니다. –

+0

@ Jankapunkt 방금 암호에서 특수 문자를 제거 했으므로 작동했습니다! –

답변

2

이것은 여객에게 아무런 문제가되지 않으며 구성시 문자열을 전달하기 만합니다. 보통 같은 따옴표로 전체 문자열을 묶어야합니다 :

passenger_env_var MONGO_URL 'mongodb://db_user:[email protected]_name:port_no,host2_name:port_no/db_name?replicaSet=replica_set_name;' 

문제 몽고 클라이언트가 당신이 같은 URL 인코딩으로, 지원하는 탈출 메커니즘을 사용할 필요가 의미하는 문자열을 이해할 필요가 있다는 것입니다.

# password = [email protected], @ = url encoded as %40 
passenger_env_var MONGO_URL 'mongodb://username:p%[email protected]:port/dbname'; 

당신은 다른 특수 문자 here의 기본 URL 인코딩을 볼 수 있습니다 암호는 @을 포함하는 경우 예를 들어, %40와 것을를 URL 인코딩 할 수 있습니다.