Не удается подключиться к MongoDB из приложения для воспроизведения с ошибкой команды salat: [listDatabases]

Я пытаюсь начать работу с плагином salat в playframework. Я настроил базу данных в application.conf, добавил все зависимости в Build.scala и добавил salat в файл play.plugins. На самом деле я еще не добавил код в проект, я просто выполнил инструкции на странице github, а затем попытался запустить проект. Я получаю следующее сообщение об ошибке

(Server started, use Ctrl+D to stop and go back to the console...)

[info] play - mongodb [default] connected at [email protected]:31907/heroku_app4620908
[error] application - 

! @6bchnaacn - Internal server error, for request [GET /] ->

play.api.Configuration$$anon$1: Configuration error [couldn't connect to [ds031907.mongolab.com/107.21.153.211:31907]]
    at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:71) ~[play_2.9.1-2.0.3.jar:2.0.3]
    at play.api.Configuration.reportError(Configuration.scala:258) ~[play_2.9.1-2.0.3.jar:2.0.3]
    at se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:105) ~[play-plugins-salat_2.9.1-1.0.8.jar:1.0.8]
    at se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:98) ~[play-plugins-salat_2.9.1-1.0.8.jar:1.0.8]
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194) ~[scala-library.jar:0.11.3]
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194) ~[scala-library.jar:0.11.3]
Caused by: com.mongodb.CommandResult$CommandFailure: command failed [listDatabases]: { "serverUsed" : "db-uri" , "errmsg" : "need to login" , "ok" : 0.0}
    at com.mongodb.CommandResult.getException(CommandResult.java:88) ~[mongo-java-driver-2.8.0.jar:na
    at com.mongodb.CommandResult.throwOnError(CommandResult.java:134) ~[mongo-java-driver-2.8.0.jar:na]
    at com.mongodb.Mongo.getDatabaseNames(Mongo.java:356) ~[mongo-java-driver-2.8.0.jar:na]
    at com.mongodb.casbah.MongoConnection.getDatabaseNames(MongoConnection.scala:190) ~[casbah-core_2.9.1-2.4.1.jar:2.4.1]
    at se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:103) ~[play-plugins-salat_2.9.1-1.0.8.jar:1.0.8]
    at se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:98) ~[play-plugins-salat_2.9.1-1.0.8.jar:1.0.8]

Я в тупике, потому что добавил свой пароль и все остальное в файл conf. Из журнала похоже, что все, что пытается подключиться для меня к базе данных, сначала не входит в систему, используя предоставленную мной информацию.


person wfbarksdale    schedule 17.08.2012    source источник


Ответы (4)


У меня тоже проблема ...

он должен идти с методом onStart SalatPlugin, который запрашивает все имена базы данных: source._2.connection.getDatabaseNames().

Этот код просто проверяет работоспособность сервера ...

Я собираюсь узнать у Леона, как мы могли бы это сделать по-другому! К сожалению, вы не сможете подключиться, пока это не будет исправлено!

Следите за обновлениями по этой проблеме https://github.com/leon/play-salat/issues/23

person Andy Petrella    schedule 18.08.2012
comment
Я бы очень хотел свернуть проект и попытаться исправить это сам, но я немного озадачен sbt и тем, как я могу собрать из исходников. stackoverflow.com/questions/12021538/ - person wfbarksdale; 18.08.2012
comment
Есть ли способ настроить плагин с помощью глобального метода onStart? - person wfbarksdale; 19.08.2012
comment
К сожалению, нет, потому что метод Global onStart - это метод пост-плагинов ... Что логично. Кроме того, это конкретное поведение не будет решено с помощью конфигурации :( - person Andy Petrella; 19.08.2012

Как вы говорите, похоже, что основная проблема заключается в том, что MongoDB отклоняет команду «listDatabases». Эта команда требует доступа администратора к процессу MongoDB, поскольку она раскрывает информацию о других размещенных базах данных. там.

К сожалению, возвращаемое сообщение «необходимо войти в систему» ​​немного вводит в заблуждение. Вы вошли в систему! У вас просто нет разрешения на перечисление баз данных.

Вот простой эксперимент, который вы можете попробовать с оболочкой MongoDB. Видите, что "show dbs" завершается ошибкой с тем же сообщением об ошибке, которое вы получили в своем приложении, но "show collections", для которого не требуется доступ к каким-либо другим базам данных за пределами вашей собственной, завершается успешно?

% mongo ds031907.mongolab.com:31907/heroku_app4620908 -u heroku_app4620908 -p your_password
MongoDB shell version: 2.0.7
connecting to: ds031907.mongolab.com:31907/heroku_app4620908
> show dbs
Fri Aug 17 13:12:10 uncaught exception: listDatabases failed:{ "errmsg" : "need to login", "ok" : 0 }
> show collections
system.indexes
system.users

(Примечание: я сделал это со своей учетной записью MongoLab и изменил текст при копировании и вставке здесь, чтобы вы могли просто скопировать его в свой терминал.)

Есть ли способ избежать вызова listDatabases? Я не знаком с используемой вами структурой.

person jared    schedule 17.08.2012
comment
Хорошо спасибо. Я думал, что это проблема, я пытаюсь понять, как это исправить. - person wfbarksdale; 18.08.2012

Это исправлено в последней версии play-salat, теперь вместо нее используется getCollectionNames.

person Leon Radley    schedule 07.09.2012

использовать администратора

db.addUser ('имя пользователя', 'пароль пользователя')

db.auth ('имя пользователя', 'пароль пользователя')

показать БД

Джава:

БД db = mongo.getDB (YouDBName);

db.authenticate (имя пользователя, userPassword.toCharArray ());

System.out.println (mongo.getDatabaseNames ());

person 5cai    schedule 21.10.2013