2009-02-20 3 views
5

나는 간단한 grails 파일 업로드 응용 프로그램을 가지고 있습니다.grails base.dir 시스템 속성

transferTo를 사용하여 파일을 파일 시스템에 저장하고 있습니다.

내가 내 6.1 WAS 서버에 배포 할 때 항상 null의 몇 가지 이유를 들어

def basePath = System.properties['base.dir'] // HERE IS HOW I GET IT 

     println "Getting new file" 
     println "copying file to "+basePath+"/files" 
     def f = request.getFile('file') 
     def okcontents = ['application/zip','application/x-zip-compressed'] 
     if (! okcontents.contains(f.getContentType())) { 
      flash.message = "File must be of a valid zip archive" 
      render(view:'create', model:[zone:create]) 
      return; 
     } 
       if(!f.empty) { 
        f.transferTo(new File(basePath+"/files/"+zoneInstance.title+".zip")) 
       } 
       else 
       { 
        flash.message = 'file cannot be empty' 
         redirect(action:'upload') 
       } 
     println "Done getting new file" 

을 사용하고 내 컨트롤러의 기본 경로를 얻으려면.

dev를 실행하지만 WAS 서버에서 성능이 저하되지 않는 이유는 무엇입니까? 이 정보에 다른 방식으로 액세스해야합니까?

답변

4

감사 J 수 있습니다 Grails의 구성 객체,

내가 가장 역동적 인 솔루션 포스 발견을 사용하는 ible. 원칙적으로 어떤 소프트웨어에도 절대 경로를 코딩하는 것을 좋아하지 않습니다. 특성 파일 또는 아니오. 그래서 여기

그것이 수행하는 방법이다 :

def basePath = grailsAttributes.getApplicationContext().getResource("/files/").getFile().toString() 

grailsAttributes는 컨트롤러에서 사용할 수 있습니다.

getResource (일부 상대 dir)는 web-app 폴더 내부에서 아무 것도 찾지 않습니다.

그래서 내 dev에 시스템의 예를 들어 그것은 C "에게 toString합니다 : \ WORKSPACEFOLDER \ PROJECTFOLDER \ 웹 응용 프로그램의 \을 C 위의 내 예제과 같이 말

에 concated 상대 디렉토리로 : \ WORKSPACEFOLDER \ PROJECTFOLDER \ web-app \ files

WAS 6.1에서 사용해 보았는데 컨테이너에서 아무런 문제가 없었습니다. toString해야합니다. 그렇지 않으면 객체를 반환하려고 시도합니다.

mugafuga 컨트롤러의 아웃

3

Grails가 dev 모드에서 실행될 때, basedir을 포함하여 차례대로 Gant 스크립트와 앱에 전체 환경 호스트를 제공합니다.

grails.bat를 살펴 보자 또는 grails.sh 스크립트 당신은이 라인을 발견 할 것이다 :이 스크립트는 당신이 얻을 dev에 모드에서 환경을 시작할 때

Unix: -Dbase.dir="." \ 
Windows: set JAVA_OPTS=%JAVA_OPTS% -Dbase.dir="." 

을 이들은 무료로 던져졌습니다.

WAR를 가져 와서 배포 할 때 더 이상이 스크립트를 사용하지 않으므로 다른 방법으로 문제를 해결해야합니다. 당신도

  1. , 응용 프로그램 서버의 시작 스크립트에 재산 자신을 지정할 수 있습니다 예 :. -Dbase.dir =/어떤/말 일세 .. 그러나
4

확실한 방법은있다 ...

grailsApplication.parentContext.getResource("dir/or/file").file.toString() 

(예 :가. 부트 스트랩)? 그냥 주사하십시오.

def grailsApplication 

감사합니다.

+0

이 현재 허용 대답보다 갈 수있는 더 좋은 방법입니다. –

2

또 다른 옵션 :

데프 basePath = BuildSettingsHolder.settings.baseDir

관련 문제