Использование MongoDB в Grails и CloudBees
Изменить: Проблема решена, я опечатка "производство" в конфигурации. Глупая ошибка...
Я создал небольшое скелетное приложение Grails с использованием MongoDB, которое работает на моем локальном компьютере. Я могу успешно развернуть приложение на CloudBees, используя bees app:deploy target/proj-0.1.war -appid user/proj
и работает (кроме БД конечно).
Затем я создал MongoDB с помощью MongoHQ и получил адрес mongodb://cloudbees:123@paulo.mongohq.com:10044/456
, Исходя из этого, я отредактировал свой "DataSource.groovy" следующим образом:
environments {
development {
grails {
mongo {
host = 'localhost'
port = 27017
databaseName = 'db'
}
}
}
test {
grails {
mongo {
host = 'localhost'
port = 27017
databaseName = 'db'
}
}
}
producution {
grails {
mongo {
// based on: cloudbees:123@paulo.mongohq.com:10044/456
host = 'paulo.mongohq.com'
port = 10044
username = 'cloudbees'
password = '123'
databaseName = '456'
}
}
}
}
Однако при развертывании приложения с помощью следующих команд
bees config:set -a proj -P grails.env=production
grails war
bees app:deploy target/proj-0.1.war -appid user/proj
bees app:tail user/proj
и затем открыть URL-адрес в браузере, я получаю следующие ошибки, как только первый запрос к БД:
Sep 11, 2013 8:24:49 AM com.mongodb.DBTCPConnector initDirectConnection
WARNING: Exception executing isMaster command on /127.0.0.1:27017
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.mongodb.DBPort._open(DBPort.java:223)
at com.mongodb.DBPort.go(DBPort.java:125)
at com.mongodb.DBPort.go(DBPort.java:106)
at com.mongodb.DBPort.findOne(DBPort.java:162)
at com.mongodb.DBPort.runCommand(DBPort.java:170)
at com.mongodb.DBTCPConnector.initDirectConnection(DBTCPConnector.java:533)
at com.mongodb.DBTCPConnector.isMongosConnection(DBTCPConnector.java:334)
at com.mongodb.Mongo.isMongosConnection(Mongo.java:618)
at com.mongodb.DB.wrapCommand(DB.java:281)
at com.mongodb.DB.command(DB.java:259)
at com.mongodb.DB.command(DB.java:243)
at com.mongodb.DBCollection.getCount(DBCollection.java:985)
at com.mongodb.DBCursor.size(DBCursor.java:602)
[...]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Sep 11, 2013 8:24:49 AM com.mongodb.DBTCPConnector initDirectConnection
WARNING: Exception executing isMaster command on /127.0.0.1:27017
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.mongodb.DBPort._open(DBPort.java:223)
[...]
at java.lang.Thread.run(Unknown Source)
Sep 11, 2013 8:24:49 AM com.mongodb.DBPortPool gotError
WARNING: emptying DBPortPool to /127.0.0.1:27017 b/c of error
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.mongodb.DBPort._open(DBPort.java:223)
at com.mongodb.DBPort.go(DBPort.java:125)
at com.mongodb.DBPort.call(DBPort.java:92)
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:244)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288)
at com.mongodb.DB.command(DB.java:261)
at com.mongodb.DB.command(DB.java:243)
at com.mongodb.DBCollection.getCount(DBCollection.java:985)
at com.mongodb.DBCursor.size(DBCursor.java:602)
[...]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
2013-09-11 08:24:49,677 [http-8422-1] ERROR errors.GrailsExceptionResolver - ConnectException occurred when processing request: [GET] /project/list
Connection refused. Stacktrace follows:
java.net.ConnectException: Connection refused
at com.mongodb.DBPort._open(DBPort.java:223)
at com.mongodb.DBPort.go(DBPort.java:125)
at com.mongodb.DBPort.call(DBPort.java:92)
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:244)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288)
at com.mongodb.DB.command(DB.java:261)
at com.mongodb.DB.command(DB.java:243)
at com.mongodb.DBCollection.getCount(DBCollection.java:985)
[...]
at net.stax.appserver.webapp.RequestSetupValve.invoke(RequestSetupValve.java:31)
На http://wiki.cloudbees.com/bin/view/RUN/MongoHQ говорится, что я также могу использовать привязки следующим образом:
bees app:bind -a proj -r mongohq:db -as DB
Тем не менее, я не уверен, как это поможет в этой проблеме. Есть идеи? Мои записи в "DataSource.groovy" неверны? Спасибо за вашу помощь.
1 ответ
Вы сделали опечатку в конфигурации "производство" против "производство"
Для связанных ресурсов вы можете использовать:
def url = System.getProperty('MONGOHQ_URL_DB')
в файле конфигурации grails, но CloudBees вводит только полный URL, а не хост, порт и т. д., поэтому может использовать новый java.net.URI(url).host