在EC2 Amazon Linux实例上托管Grails

时间:2019-05-26 01:32:29

标签: grails amazon-ec2 tomcat8 amazon-elastic-beanstalk

我已成功将Grails应用程序上载并在Linux ec2上的Tomcat 8和Java 8上的Amazon Elastic beantalk上部署了grails应用程序,并且Web应用程序已启动并正在运行。与RDS数据库进行REST API调用时,它很好用。我有一个API,可以将文件从移动应用程序和Web应用程序前端上传到服务器。在本地主机上运行此grails应用程序时,它非常适合此api,并将文件成功上传到我的user.home/{myapplicationDirectory}/somefile中的Windows OS路径。但是在以弹性beantalk运行此应用程序并尝试从移动设备上传图像后,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 :(得分:0)

嗨,因为我没有看到完整的应用程序,所以我不想太冒昧,但是当您使用AWS Beanstalk时,应该将本地文件存储始终视为临时存储。如果服务器停止响应或未通过任何运行状况检查,则服务器可能会被beantalk终止并重新启动。 您还有其他可用选项,我也不知道您是否考虑过它们,并且有充分的理由使用本地文件系统,因此请原谅我,尽管如果没有,您可以使用S3来存储图像,然后您不必担心磁盘空间,然后可以通过AWS的CDN-Cloudfront自动提供图像,从而也减少了应用程序的负载。

或者,当您确实要将这些图像存储在文件系统中时,可以使用弹性文件系统EFS。您的EBS实例可以在启动时挂载文件系统,因此无论您何时启动实例,该文件系统将始终可用。

我不建议使用标准EBS卷,因为您只能将一个卷附加到单个实例,如果您使用EFS,则不必担心空间,它可以挂载到多个实例,因此稍微灵活一点。