2010-03-24 2 views
0

나는 grails-1.2.1을 사용하여 Jason Rudolph's book at InfoQ의 경마장 예제를 따라 가고 있습니다. 나는 hsqldb에서 mysql으로 전환 할 부분으로 갔다. DataSource.groovy 파일에서 hsqldb에 대한 모든 참조를 삭제했다고 생각하지만 예외가 발생하고 스택 추적에서 여전히 hsqldb를 사용하고 있음을 보여줍니다. DataSource.groovy에mysql을 요청할 때 grails가 hsqldb를 사용하는 이유는 무엇입니까?

dataSource { 
    boolean pooled = true 
    String driverClassName = "com.mysql.jdbc.Driver" 
    String url = "jdbc:mysql://localhost/dfpc2" 
    String dbCreate = "create" 
    String username = "dfpc2" 
    String password = "dfpc2" 
    dialect = org.hibernate.dialect.MySQL5InnoDBDialect 
} 
hibernate { 
    cache.use_second_level_cache=true 
    cache.use_query_cache=true 
    cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider' 
} 
// environment specific settings 
environments { 
    development { 
    } 
    test { 
    } 
    production { 
    } 
} 

내가 모든 오류없이 시작 grails run-app

. 홈 페이지로 이동할 수 있습니다. 그러나 링크 중 하나를 클릭하면 스택 추적이 표시됩니다.

java.sql.SQLException: Table not found in statement [select this_.id as id0_0_, this_.version as version0_0_, this_.name as name0_0_, this_.variant as variant0_0_ from domainObject this_ limit ?] 
at org.hsqldb.jdbc.Util.throwError(Unknown Source) 
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source) 
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source) 
at dfpc2.domainObjectController$_closure2.doCall(script1269434425504953491149.groovy:13) 
at dfpc2.domainObjectController$_closure2.doCall(script1269434425504953491149.groovy) 
at java.lang.Thread.run(Thread.java:619) 

My mysql 데이터베이스에는 테이블이 생성되지 않은 것으로 표시됩니다. (I는 그루비의 아직 MySQL로 연결을 생각하지 않습니다.)

상황이 내가 확인했습니다

  1. MySQL의 커넥터 - 자바-5.1.6.jar를 lib 디렉토리에 있습니다.
  2. 내가 개발 환경 (아직 테스트하거나 자극을 졸업하지 않은 경우)에 데이터 원본 정보를 퍼팅 시도
  3. grails clean을 시도했지만, 어떤 차이가없는 것 같았다. stdout은 내가 개발 환경을 사용하고 있음을 보여줍니다.

나는 해결책을 찾기 위해 봤지만, 내가 찾은 유일한 해결책은 사람들이 테스트 환경이나 생산 환경을 변경하지 않을 때이다.

답변

6

문제는 형식 선언입니다.

dataSource { 
    boolean pooled = true 
    String driverClassName = "com.mysql.jdbc.Driver" 
    String url = "jdbc:mysql://localhost/dfpc2" 
    String dbCreate = "create" 
    String username = "dfpc2" 
    String password = "dfpc2" 
    dialect = org.hibernate.dialect.MySQL5InnoDBDialect 
} 

는 했어야하는 대신 :

dataSource { 
    pooled = true 
    driverClassName = "com.mysql.jdbc.Driver" 
    url = "jdbc:mysql://localhost/dfpc2" 
    dbCreate = "create" 
    username = "dfpc2" 
    password = "dfpc2" 
    dialect = org.hibernate.dialect.MySQL5InnoDBDialect 
} 

는 Grails의의 DOCO에서 답을 찾았습니다

의 전 타입이나 def 키워드를 포함하지 않는 데이터 소스를 구성 Groovy와 같은 구성 설정은 이들을 로컬 변수 정의로 처리하며 처리되지 않습니다. 예를 들어, 다음은 유효하지 않습니다

boolean pooled = true 
1

그 책이 방법 아웃 날짜이며 InfoQ 그것을 잡아 당기거나 최근에 와서 Grails에 1.2을 기반으로 제 2 판에 링크를 추가해야합니다 http://www.infoq.com/minibooks/grails-getting-started

+0

팁 주셔서 감사합니다 - 두 번째 에디션은 훨씬 더 사용하기 쉽습니다. – John

관련 문제