我有 3 个 Grails 2.x 项目。对于此示例,它们是:
ProjectCore - A Grails plugin containing all reusable code (domains, taglibs, etc)
ProjectWeb - Front facing web application. Uses ProjectCore
ProjectAdmin - Admin appliction. Uses ProjectCore
几乎所有的图像、js、标签库、服务等都在 ProjectCore 中,在各个项目中只有应用特定的控制器/视图/服务/js/css。
一切都在本地运行良好,使用 NetBeans 作为我的 IDE。我对 ProjectAdmin 项目进行了战争,并将其部署到运行 Tomcat 6 的 Ubuntu 服务器上。应用程序中的所有内容都按预期工作,除了 1 个图像:avatar.png(包含在 ProjectCore 应用程序中)。
我正在使用 g:resource 标记创建所有图像链接,并且它们都正确解析为 /static/images/some_image_name.png url,除了这张图像。我还验证了该图像存在于战争中(位于所有其他图像所在的 plugins/ProjectCore/images 中)。
对于这个特定的图像,如果用户没有为自己上传头像,我将使用 taglib (AvatarTagLib) 创建指向该图像的链接。此 Taglib 在 ProjectRoot 中,但正在从其他项目中调用。我相信其他图像是从特定项目中的视图中调用的,所以这可能是挂断的地方。
最初,当我部署应用程序时,我忘记将战争(和包含目录)的所有权更改为 tomcat6:tomcat6,所以我遇到的问题不仅是这个图像,还有来自 SpringSecurityPlugin 的 messages.properties 文件。我将其全部清除,修复了权限,并且解决了除此之外的所有问题。
以前有没有人遇到过这种行为,或者知道我可以采取的任何其他途径来解决这个问题?
编辑:我忘了提一件事。当我尝试通过http://admin.mydomain.com/images/avatar.png或http://admin.mydomain.com/static/images/avatar.png直接访问图像时,都返回 404。但是,我可以通过这种方式访问其他图像。
编辑 2:这不仅限于单个图像。它影响了插件中大约一半的图像。