Хостел Grails на EC2 Amazon Linux Instance - PullRequest
0 голосов
/ 26 мая 2019

Я успешно загрузил и развернул свое приложение Grails на Amazon Beanstalk с эластичной средой с Tomcat 8 и Java 8 на linux ec2, и веб-приложение запущено и работает.Он хорошо работает при выполнении вызовов REST API к базе данных RDS.У меня есть API для загрузки файла на сервер из мобильного приложения и из веб-приложения.При запуске этого приложения grails в localhost, оно прекрасно работает для этого API и успешно загружает файлы по пути user.home/{myapplicationDirectory}/somefile в моем Windows OS.Но после запуска этого приложения в эластичном бобовом стебле и попытки загрузить изображение с мобильного телефона NPE отображается как FileNotFoundException

FileNotFoundException occurred when processing request: [POST] /api/images/add
/usr/share/tomcat8/sdpl/images/260519011919.zip (No such file or directory)
Stacktrace follows:

java.io.FileNotFoundException: /usr/share/tomcat8/sdpl/images/260519011919.zip (No such file or directory)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)

У меня есть служба для получения каталога хранения данных приложения с помощью этого метода

 def String getApplicationPath() {
        return System.getProperty("user.home") + File.separator + "images" + File.separator;
    }

1 Ответ

0 голосов
/ 31 мая 2019

Привет, поскольку я не вижу вашего полного приложения, я не хочу быть слишком самонадеянным, но, поскольку вы используете AWS Beanstalk, вы должны рассматривать локальное хранилище файлов как временное хранилище.Ваш сервер может быть прерван и перезапущен beanstalk, если он перестает отвечать или не проходит никаких проверок работоспособности.У вас есть другие доступные варианты, опять же, я не знаю, рассматривали ли вы их, и у вас есть веская причина для использования локальной файловой системы, так что извините, если это так, хотя если нет, вы можете использовать S3 для хранения изображений, тогдавам не нужно беспокоиться о дисковом пространстве, и изображения могут автоматически обслуживаться через AWS CDN - Cloudfront, что также снижает нагрузку на ваше приложение.

В качестве альтернативы, если вы действительно хотите сохранить эти изображения в файловой системе, вы можете использовать EFS, Elastic File System.Ваш экземпляр EBS может монтировать файловую систему при запуске, поэтому она всегда будет доступна при запуске ваших экземпляров.

Я не предлагал использовать стандартный том EBS, поскольку вы можете когда-либо присоединять том только к одному экземпляру, если вы используете EFS, вам не нужно беспокоиться о пространстве, и его можно подключить кнесколько экземпляров, так что немного более гибким.

...