Как получить доступ к файлам в каталоге проектов с помощью Grails - PullRequest
4 голосов
/ 09 мая 2011

Мне потребовалось несколько шаблонов для рендеринга некоторого кода для вставки пользователями.Я поместил их в

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

Затем я попытался получить к ним доступ, используя их относительный путь (grails-app/resources/templates/quickInstallCode.html), и он отлично работал.

Когда мы затем развернули приложение на сервере Tomcat,используя файл .war, пути начали указывать на неправильное местоположение.

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

Я предполагал, что Grails, предоставляя хорошие значения по умолчанию для всего, справится с этим беспорядком для меня, но, похоже, это не так.

Я также пробовал этот вызов, и он, кажется, работал отлично, но при развертывании BuildSettingsHolder не содержал параметров сборки, что приводило к фатальной ошибке.

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 и не распакованы на сервере.

Итак, вопросы:

  • Где в вашем проекте вы бы поместили файлы, подобные этим?
  • Как получить надежный и стабильный способ доступа к этим файлам?Мне просто нужен стабильный путь к базовому каталогу, без необходимости что-то жестко кодировать в конфигурации ... Это не может быть так сложно.

Ответы [ 3 ]

2 голосов
/ 09 мая 2011

Взгляните на эту ссылку и попробуйте использовать getResource, предоставляемый пружиной. Его путь более гибкий и настраиваемый.

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

Кстати, Conf находится в корне пути к классам, вы можете прикрепить файлы в src / java или src / groovy.

2 голосов
/ 10 мая 2011

У меня есть 2 решения для этой ситуации:

  1. Сохранить шаблон в базе данных, в таблице настроек. Этот способ гарантирует, что ничто не может пойти не так.

  2. Вы можете рассмотреть возможность использования папки ресурсов, как предложил Sachin & Nirmal. Что касается безопасности, я думаю, вы можете настроить SpringSecurity Plugin для защиты определенных ресурсов, чтобы к нему мог получить доступ только пользователь сайта.

0 голосов
/ 09 мая 2011

Я храню свои статические ресурсы в папке веб-приложения и получаю к ним доступ следующим образом ApplicationHolder.application.parentContext.servletContext.getRealPath ( "quickInstallCode.html") // quickInstallCode.html должен находиться в папке веб-приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...