2012-05-18 3 views
5

Grails 1.3.7 앱을 2.0.3으로 업그레이드하는 중이며 대부분 문제를 해결했습니다. 그러나, 나는 사용자를 생성하고 데이터베이스에 저장하는 코드를 사용했습니다. 이미 사용 된 사용자 이름을 다시 사용하고 사용자 이름에 고유 한 제한이 있으므로 코드가 유효성 검사를 통과해서는 안됩니다. .validate()이 true를 반환하지만 user.save()이 MySql 고유 제한 조건 오류와 함께 호출 될 때 코드는 실제로 폭탄이됩니다. User.groovy에서Grails 유효성 검사가 업그레이드 후 작동하지 않습니다.

def submitSignup = { 
     def user = new User(params) 

     user.validate() 
     if (!user.hasErrors()) { 
      ... 
      // This line bombs with the MySql unique constraint I would have expected .validate() to get 
      user.save() 
     } 
} 

:

static constraints = { 
    username(blank: false, unique: true); 
    ... 
} 

어떤 아이디어

에서 오류가 발생 하는가?

EDIT : Acegi의 Spring Security 플러그인으로 업그레이드 중입니다. 나는 이것이 적절하다고 생각하지 않지만, 나는 그것을 언급 할 것이라고 생각했다.

문제가있는 샘플을 https://github.com/skazzaks/Grails-Unique-Test에 올려 놓았으니 분명히 버그처럼 보입니다.

+0

테스트에서이 문제가 발생하지 않았습니까? 아니면이 문제를 어떻게 제기 했습니까? 간단한 단위 테스트를 설정하고 고유 한 제약 조건이 제대로 작동하고 있습니다. –

+0

@JarredOlson 이것은 응용 프로그램을 실행하고 새로운 사용자 (사용자 이름이 이미 사용됨)를 제출하려고 할 때 실패합니다. 이것은 프로덕션 환경에있는 1.3.7 버전에서 올바르게 작동합니다. 불균형을 어떻게 설명해야할지 모르겠습니다. – skaz

+0

Grails 애플리케이션이 실행되는 동안 고유 제한 조건을 추가 한 후 다소 관련 검증 문제가 발생했습니다. validate()는 고유하지 않은 값에 대해 불평하지 않았습니다. 그것은 청소, 수동으로 대상 디렉토리를 삭제하고 컴파일하는 데 도움이되었습니다. – HumanInDisguise

답변

0

내 도메인 클래스가 src/groovy이라는 사실 때문에 버그라고 생각합니다.

3

1.3.7에서 2.0.3으로 업그레이드하는 중에 며칠 전에 비슷한 확인 문제가 발생했습니다.

내 트릭은 내 목표 디렉토리를 수동으로 지운 것입니다. 모든 클래스를 재 컴파일하면 분명히 응용 프로그램을 다시 시작할 수 있습니다.

당신의 경우에는 효과가 있을지 모르지만 시도해 볼만한 가치가 있을지 모르겠다.

+0

Grails 애플리케이션이 실행되는 동안 고유 제약 조건을 추가 한 후 다소 관련 검증 문제가 발생했습니다. validate()는 고유하지 않은 값에 대해 불평하지 않았습니다. 그것은 청소, 수동으로 대상 디렉토리를 삭제하고 컴파일하는 데 도움이되었습니다. – HumanInDisguise

관련 문제