Приложение Grails не получает данные из конфигурации - PullRequest
2 голосов
/ 19 июля 2011

У меня есть три блока окружения в моем конфигурационном файле Grails, подобный этому:

environments {
    production {
        grails.serverURL = "https://www.mysite.com"
    }
    development {
        grails.serverURL = "http://localhost:8080/${appName}"
    }
    test {
        grails.serverURL = "http://localhost:8080/${appName}"
    }
}

... // more code

environments {
    production {
        authnet.apiId = "123456"
        authnet.testAccount = "false"
    }
    development {
        authnet.apiId = "654321"
        authnet.testAccount = "true"
    }
    test {
        authnet.apiId = "654321"
        authnet.testAccount = "true"
    }
}

... // more code

environments {
    production {
        email.sales = 'sales@mysite.com'
    }
    development {
        email.sales = 'test@mysite.com'
    }
    test {
        email.sales = 'test@mysite.com'
    }
}

Где-то в контроллере:

println grailsApplication.config.grails.serverURL
println grailsApplication.config.authnet.apiId
println grailsApplication.config.email.sales

Распечатывается:

http://localhost:8080/myapp
[:]
test@mysite.com

Так что по какой-то причине приложение не может получить данные из некоторых блоков среды. Вещи вне блоков окружающей среды в порядке. Я заметил эту проблему с несколькими различными приложениями, разными конфигами и т. Д. Это ошибка Grails или я делаю что-то не так? Я бегу Grails 1.3.6

Ответы [ 2 ]

4 голосов
/ 19 июля 2011

Ваше переопределение информации о конфигурации несколько раз.Поскольку вы пишете отличный код, который выполняется вместо конфигурации XML, ваши изменения не объединяются автоматически, несколько блоков конфигурации перезаписывают друг друга.Вы должны определить все в одном блоке, как

environments {
    development {
        grails.serverURL = "http://localhost:8080/${appName}"
        authnet.apiId = "654321"
        authnet.testAccount = "true"
    }
    test {
        grails.serverURL = "http://localhost:8080/${appName}"
        authnet.apiId = "654321"
        authnet.testAccount = "true"
    }
    production {
        grails.serverURL = "https://www.mysite.com"
        authnet.apiId = "123456"
        authnet.testAccount = "false"
        }
0 голосов
/ 19 июля 2011

Вы работаете в среде разработки, поэтому вы выбираете хост и порт в настройках разработки.По умолчанию

grails run-app

запускает приложение с использованием среды разработки.Чтобы запустить его в рабочем режиме, либо создайте файл войны с помощью команды grails war и разверните его в контейнере сервлета, либо используйте:

grails prod run-app

См. http://www.grails.org/Environments для получения дополнительной информации.

...