2013-01-16 21 views
2

有在Reloading bootstrap with Grails重新加載Grails的引導與環境

重裝Grails的引導一個很好的答案,但我有我的init關閉特定環境,所以我得到的錯誤:

groovy.lang.MissingMethodException: No signature of method: BootStrap.environments() is applicable for argument types: (BootStrap$_closure1_closure3) values: [[email protected]] 

引導代碼基本上彈簧安全域類的角色,用戶,USER_ROLE

import org.mine.* 

class BootStrap 
{ 
    def init = 
    { servletContext -> 
     environments 
      { 
      development 
      { 
      def adminRole = new DummyRole(authority: 'ROLE_ADMIN').save(flush: true) 
      def userRole = new DummyRole(authority: 'ROLE_USER').save(flush: true) 

      def user = new DummyUser(username: 'user1', email_address: '[email protected]', enabled: true, password: 'password') 
      def user1 = new DummyUser(username: 'user2', email_address: '[email protected]', enabled: true, password: 'password') 
      def user2 = new DummyUser(username: 'user3', email_address: '[email protected]', enabled: true, password: 'password') 

      user.save(flush: true) 
      user1.save(flush: true) 
      user2.save(flush: true) 

      DummyUserDummyRole.create manager, adminRole, true 
      DummyUserDummyRole.create user, userRole, true 
      DummyUserDummyRole.create user1, userRole, true 
      DummyUserDummyRole.create user2, userRole, true 

      assert DummyUser.count() >= 9 
      assert DummyRole.count() >= 10 
      assert DummyUserDummyRole.count() >= 9 


     } // end-development 
     test { 

      // bootstrap data for test environment 

     } 
     production { 

      // bootstrap data for production environment 

     } 
    } 
} 

    def destroy = 
    { 
      // code here 
    } 
} 
+0

你可以發佈您的引導代碼? –

回答

4

這個工作對我來說:

def servletCtx = org.codehaus.groovy.grails.web.context.ServletContextHolder.servletContext 
def myBootstrapArtefact = grailsApplication.getArtefacts('Bootstrap')[-1] 
BootStrap.metaClass.environments = grails.util.Environment.&executeForCurrentEnvironment 
myBootstrapArtefact.referenceInstance.init(servletCtx) 

精心從我送花兒給人用這個解決方案,您:-)

0

參考答案複製(然後修改),它爲我工作。也適用於Grails 3.x。 Here

0

這是很容易,只是交換你的語法:

Environment.executeForCurrentEnvironment { 
    production { 
     // do something in production 
    } 
    development { 
     // do something only in development 
    } 
}