2011-05-09 75 views
4

我需要一些模板來呈現用戶粘貼的一些代碼。我把這些變成如何使用Grails訪問項目目錄中的文件

/project-dir/grails-app/resources/templates/quickInstallCode.html 

然後我試圖使用他們的相對路徑(grails-app/resources/templates/quickInstallCode.html)訪問他們,這真是棒極了。

當我們使用.war文件將應用程序部署到Tomcat服務器時,路徑開始指向錯誤的位置。

ERROR call, Template file /var/lib/tomcat6/grails-app/resources/templates/quickInstallCode.html not found. 

我認爲,Grails提供了良好的默認設置,可以爲我處理這個混亂,但它似乎沒有。

我也試過這個調用,它看起來很好,但是當部署時,BuildSettingsHolder沒有包含build Settings,這導致了一個致命的錯誤。

BuildSettingsHolder.settings.baseDir.toString() 

http://grails.org/doc/latest/api/grails/util/BuildSettingsHolder.html http://grails.org/doc/latest/api/grails/util/BuildSettings.html

我非常沮喪,我不能讓這個簡單的任務工作,但這是如此複雜的原因似乎是,所有文件都封裝在WAR中,而不是在服務器上解壓縮。

所以問題是:

  • 凡在你的項目,你會放 文件也是這樣嗎?
  • 如何獲得一個 可靠和穩定的方式來訪問 這個文件?我只需要一個到基本目錄的穩定路徑,而不必在配置中硬編碼一些東西......這並不難。

回答

2

我有2個解決方案,提出了這樣的情況:

  1. 保存模板數據庫中,在設置表。這樣可以保證沒有任何問題可以出現。

  2. 你可以考慮使用資源文件夾,如Sachin & Nirmal提出的。關於安全性,我認爲你可以配置SpringSecurity Plugin來保護特定資源,以便它只能被站點用戶訪問。

+1

可悲的是,似乎沒有答案能夠真正滿足我的需求。把這些東西放到數據庫中似乎對我來說太過分了,把它們放在Web Apps文件夾中是有風險的。 似乎來自PHP世界的我仍然必須習慣Grails環境,並且它有缺陷,就像服務器非常抽象一樣。 – 2011-05-19 13:32:46

0

我把我的靜態資源在web應用程序文件夾,並訪問他們喜歡這個 ApplicationHolder.application.parentContext.servletContext.getRealPath(「quickInstallCode.html」) // quickInstallCode.html應該在web應用程序夾。

+2

你如何處理不應該被公衆訪問的文件?我不是Tomcat的專家,但我一直認爲這個文件夾是可以訪問的。 – 2011-05-09 12:30:43

2

看看這個link並嘗試使用spring提供的getResource。它的方式更加靈活和可配置。

def filePath = "resources/file.txt" 
def appHolder=ApplicationHolder.application.parentContext.getResource("classpath:$filePath") 

順便說一句Conf是類路徑的根,你可以粘貼在src/java或src/groovy文件中。

相關問題