【问题标题】:Using MongoDB in Grails and CloudBees在 Grails 和 CloudBees 中使用 MongoDB
【发布时间】:2013-09-11 08:38:53
【问题描述】:

编辑: 问题已解决,我在配置中输入错误“生产”。愚蠢的错误......

我使用 MongoDB 创建了一个小型 Grails 框架应用程序,该应用程序可以在我的本地计算机上运行。我可以使用 bees app:deploy target/proj-0.1.war -appid user/proj 在 CloudBees 上成功部署应用程序并且它可以工作(当然数据库除外)。

然后我使用 MongoHQ 创建了一个 MongoDB,并收到了地址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,一旦对 DB 发出第一个请求,我就会收到以下错误:

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”中的条目是否错误?感谢您的帮助。

【问题讨论】:

  • 从未尝试过,但作为猜测你会声明绑定(如在上一部分中),那么 DB url 应该在 System.getProperty( "MONGOHQ_URL_DB" )
  • @tim_yates 是的,这就是文档所说的,但是如何在 DataSource.groovy 中使用这些信息?

标签: mongodb grails groovy cloudbees


【解决方案1】:

您在配置“production”与“production”中打错了

对于绑定资源,可以使用:

def url = System.getProperty('MONGOHQ_URL_DB') 

在 grails 配置文件中,但 CloudBees 只注入完整的 URL,而不是主机、端口等,因此可以使用新的 java.net.URI(url).host

【讨论】:

  • 是的,请查看我对那个错字的编辑。我知道如何使用System.getProperty,但不知道如何将其包含在environments { production { grails { mongo { ... } } } } 结构中。
  • mongo 约定只是在 URL var 上包含所有详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多