Fala galera,A pouco tempo comecei a usar outras tecnologias otimizadoras no processo de desenvolvimento junto do Grails. Sao elas:- sass- jade- handlebars- coffeePara tal necessidade eu fui atras de alguns plugins do grails, mas nao fiquei satisfeito com alguns deles. Primeiro por que alguns encontram-se desatualizados e com pouca documentacao, e ainda tem alguns bugs. Ora, se pararmos para pensar, essas ferramentas sao complementares ao desenvolvimento, apenas voltadas para a produtividade, entao nao se deve perder muito tempo com complexidades na configuracao do ambiente. Para resolver o problema eu acabei usando uma estrutura separada do grails para o controle, uma que eu postei aqui no blog a poucos dias.. usando o gulp para realizar a tarefa.Entao foi simples.. Eu criei a seguinte estrutura no projeto grails (dentro de assets):Para esse projeto uso a versao do grails 2.3.4, e essa versao ainda nao trabalha com o plugin assets por padrao.Crieu meu gulpfile com o seguinte script:gulp = require 'gulp'sass = require 'gulp-sass'jade = require 'gulp-jade'coffee = require 'gulp-coffee'handlebars = require 'gulp-handlebars'concat = require 'gulp-concat'declare = require 'gulp-declare'wrap = require 'gulp-wrap'errorHandler = (err) -> console.log errsources = {}destinations = {}sources.sass = 'grails-app/assets/stylesheets/**/*.scss'sources.coffee = 'grails-app/assets/coffeescripts/**/*.coffee'sources.jade = 'grails-app/assets/jade/**/*.jade'sources.handlebars = 'grails-app/assets/templates/**/*.html' destinations.css = 'web-app/css'destinations.js = 'web-app/js'destinations.templates = 'grails-app/assets/templates'destinations.handlebars = 'web-app/js/bi/templates'watcher = (task) -> (evt) -> console.log 'run ' + evt.path gulp.start task gulp.task 'compile:sass', -> gulp.src(sources.sass) .pipe(sass({sourceComments: 'normal'}).on('error', errorHandler)) .pipe(gulp.dest(destinations.css))gulp.task 'compile:coffee', -> gulp.src(sources.coffee) .pipe(coffee({bare: true, sourcemap: true}).on('error', errorHandler)) .pipe(gulp.dest(destinations.js))gulp.task 'compile:jade', -> gulp.src(sources.jade) .pipe(jade().on('error', errorHandler)) .pipe(gulp.dest(destinations.templates))gulp.task 'compile:handlebars', -> gulp.src(sources.handlebars) .pipe(handlebars()) .pipe(wrap('Handlebars.template(<%= contents %>)')) .pipe(declare({ namespace: 'View.templates', noRedeclare: true })) .pipe(concat('templates.js')) .pipe(gulp.dest(destinations.handlebars))gulp.task 'default', -> gulp.start 'compile:sass', 'compile:coffee', 'compile:jade', 'compile:handlebars'gulp.task 'watch:sass', -> gulp.watch sources.sass, watcher 'compile:sass'gulp.task 'watch:coffee', -> gulp.watch sources.coffee, watcher 'compile:coffee'gulp.task 'watch:jade', -> gulp.watch sources.jade, watcher 'compile:jade'gulp.task 'watch:handlebars', -> gulp.watch sources.handlebars, watcher 'compile:handlebars'gulp.task 'watch', -> gulp.start 'watch:sass', 'watch:coffee', 'watch:jade', 'watch:handlebars' E logo depois (ou antes) de subir meu projeto grails e so executar: gulp watchE entao ficar atentos com o console do gulp quanto a erros de complilacao. E nao se esqueca de instalar as dependencias usadas no gulp via npm.Espero que ajude! Abraco Primeiro temos que saber o nome da chave. Para isso podemos usar: use information_schema;select TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from KEY_COLUMN_USAGE where REFERENCED_TABLE_NAME = 'table_name';Ou usar:show create table table_name;Agora que sabemos o nome podemos removeralter table table_name drop foreign key key_name; Salve galera,Aqui vou mostrar como usar o template javascript underscore dentro de templates jade. Primeiro vamos criar os templates jadelayouts/main.jadedoctype htmlhtml head meta(http-equiv='http-equiv', content-type='Content-type', content='text/html; charset=utf-8') link(rel='stylesheet', href='/stylesheets/foundation.css') link(rel='stylesheet', href='/stylesheets/foundation/icons/foundation-icons.css') link(rel='stylesheet', href='/stylesheets/style.css') title Mobile Mind block title body header .row .large-12.columns nav.top-bar(data-topbar) ul.title-area li.name h1 a Delicious Food li.toggle-topbar.menu-icon a span menu section.top-bar-section ul.left li.divider li.has-form .row.collapse .large-8.small-9.columns input(type='text', placeholder="Find Stuff...") .large-4.small-3.columns a.alert.button.expand.btn-search(href="#") Search ul.right li.divider li.has-dropdown a(href="#") Categorias ul.dropdown each it in ['A', 'B', 'C', 'D', 'E'] li a(href="#") Categoria #{it} block content footer.row .large-12.columns hr .row .large-6.columns p @ Copyright Mobile Mind .large-6.small-12.columns ul.inline-list.right li a(href="http://www.mobilemind.com.br", target="_blank") www.mobilemind.com.br script(src="js/script.js")index.jade extends layouts/mainblock title | Storeblock content .row .large-4.small-12.columns img(src="http://lorempixel.com/500/500/food") .custon-panel-alert h3 Delicious Food h5.subheader | Come eat here!! a(href="#") .custon-panel-main h6 99 items in your cart .large-8.columns a(href="#storeItems/50/10") load .large-8.columns .row.items-main .large-8.columns hr .pagination-centered ul.pagination li.arrow.unavailable