2017-12-14 16 views
2

自分でMongoDBクラスタを展開しました。私はNginxの上にPhusion Passengerで走っている実行中のMeteorアプリケーションを持っています。Phong Passenger MongoDBクラスタへの接続中にエラー:ホストとオプション間の区切りが間違っています。

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

しかし、それはエラーを示すを開始:接続文字列が以前の形式を以下にあったときに、アプリケーションが正常に動作していた

/<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の設定ファイルに接続文字列を更新した後、次のエラーを取得しています私は次のように接続文字列を更新することにより、ミューの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; 

はconnectioで何か問題がありn文字列またはその他の問題?

+1

したがって、その特殊文字をエスケープしても実行されません。また、文字列は86文字で、新しい文字列は156文字です。多分、これらの値の間に何かに線の長さが制限されていますか? – Jankapunkt

+0

その特殊文字をエスケープしようとしませんでした。同じ接続文字列がPM2の別のVMで動作していますが、Phusion Passangerで動作していません。 –

+0

@ Jankapunktパスワードから特殊文字を削除しただけです! –

答えて

2

これはPassengerでの問題ではなく、構成時に文字列を渡すだけです。通常、あなたのような引用符で文字列全体を囲みます:

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

問題Mongoのクライアントを使用すると、このようなURLエンコーディングとして、それがサポートするエスケープ機構を使用する必要があることを意味する文字列を、理解する必要があるということです。

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

あなたは他の特殊文字のデフォルトのURLエンコーディングを見ることができます:パスワードは@が含まれている場合たとえば、あなたは%40であることをURLエンコードすることができます。

関連する問題