(Groovy / Grails) Что делать с URL-адресами в модуле JavaScript, которые необходимо изменить для каждой среды (dev / prod / qa / etc) - PullRequest
2 голосов
/ 21 августа 2010

Я уже наказывал это раньше и / или хакнул вокруг него, но я хотел бы решить это правильно раз и навсегда.

Вопрос в том, что делать, если мне нужен URL, который меняется в зависимости от среды в модуле JavaScript, который является частью проекта Groovy / Grails

Например, у меня есть модуль JavaScript, который содержит эту функцию:

function init() {
    dojox.cometd.init('http://localhost:8082/grails-cometd/cometd');   // This URL changes for prod vs dev 
    dojox.cometd.subscribe('/queue/advisoryLock', onMessage);
}

теги ссылок Grails и т. Д. Здесь не работают. Есть ли правильный Grails / Java способ сделать это? Я ничего не мог найти ...

Ответы [ 3 ]

4 голосов
/ 22 августа 2010

, поскольку grails поддерживает настройку конфигурации, я бы указал URL-адрес в зависимости от среды, а затем установил значение в используемом макете grails.

То же самое, что и выше, но используя то, что дает вам Grails

внутри файла конфигурации

environments {
    development {
        env.root.url = 'http://localhost:8080/development'
    }  
    production {
        env.root.url = 'http://localhost:8080/production'
    }  
    staging {
        env.root.url = 'http://localhost:8080/staging'
    }  
}

внутри файла макета

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page import="org.codehaus.groovy.grails.commons.ConfigurationHolder" %>
<html>
<head>
    <script type="text/javascript">
    my_project_webroot = "${ConfigurationHolder.config.env.root.url}";
    </script>

... теперь вставьте ваши файлы JavaScript .....

Кроме того, в зависимости от того, как структурированы ваши файлы javascript, вы можете просто встроить значения конфигурации grails напрямую

3 голосов
/ 21 августа 2010

Я не знаю ни Java, ни Grails, так что может быть какой-то родной способ, о котором я не знаю (что, очевидно, было бы предпочтительнее), но одним из распространенных способов решения этой проблемы было бы определение глобальной переменной в HTML документ до внедрения скриптов:

<html>
<head>

<script type="text/javascript">
my_project_webroot = "http://localhost:8082";
</script>

... now embed your JavaScript files .....

Вы можете затем обратиться к my_project_webroot в функциях:

function init() {
    dojox.cometd.init(my_project_webroot+'/grails-cometd/cometd');   // This URL changes for prod vs dev 
    dojox.cometd.subscribe('/queue/advisoryLock', onMessage);
}

если вы находите глобальные переменные некрасивыми (они есть), вы можете также рассмотреть возможность установки глобального объекта config для всех таких настроек (веб-корень / статический веб-корень / текущий язык ...) для уменьшения помех.

Кроме того, платформа Dojo может предлагать некоторый объект конфигурации, который вы можете расширить.

0 голосов
/ 22 августа 2010

Существует также плагин Grails JavaScript URL Mappings, который сделает некоторые функции g.createLink доступными на стороне клиента для JavaScript.Если вы пытаетесь сделать ссылки на свой собственный сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...