Grails 资源:图像是 404,即使它存在于 WAR 中

Posted

技术标签:

【中文标题】Grails 资源:图像是 404,即使它存在于 WAR 中【英文标题】:Grails resources: Image is 404 even though it exists in the WAR 【发布时间】:2012-07-29 12:14:26 【问题描述】:

我有 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、taglibs、服务等都在 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)。

对于这个特定的图像,如果用户没有为自己上传头像,我将使用标记库 (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:这不仅限于单个图像。它影响了插件中大约一半的图像。

【问题讨论】:

您是否将 plugin='projectRoot' 传递给您的标签? @tomas 不,我不是。我假设您的意思是 g:resource 标签?另外,我在上面对直接访问文件进行了编辑。 【参考方案1】:

升级资源插件为我解决了这个问题。我用runtime ":resources:1.2.RC2"更新了BuildConfig.groovy

【讨论】:

【参考方案2】:

尝试将资源插件升级到1.2-RC1。

我有一个非常相似的问题,我的 3 个 png 在 /images 和 /static/images 下直接访问时会返回 404 错误。这些图像被命名为 dot.png、calendar.png 和 dotted_vertical.png。如果我重命名它们(例如 dotted_vertica.png 或 dotted_vertical1.png),它们会起作用,但我找不到任何其他相似之处或模式。确实很奇怪。

【讨论】:

【参考方案3】:

不看代码就不能说真的。

1) 您可能必须为插件中的资源传递 plugin= 2) 你试过 r:resource 吗?

如果您可以将其隔离为一个微不足道的插件和应用程序,请创建一个 jira

【讨论】:

【参考方案4】:

我也遇到了同样的问题。

我解决了它在 BuildConfig.groovy 中将资源插件(运行时“:resources:1.1.6”)更改为 webxml 插件(编译“:webxml:1.4.1”),现在它可以工作了。

我希望它也对你有用。

【讨论】:

以上是关于Grails 资源:图像是 404,即使它存在于 WAR 中的主要内容,如果未能解决你的问题,请参考以下文章

Coldfusion 10,IIS 7.5 - 即使文件存在也得到 404

response.sendError(404) 在 grails 中创建空页面

即使资源存在于可绘制文件夹中,资源未找到异常(无法找到资源 ID)

Grails ehcache 插件 - 另一个未命名的 CacheManager 已存在于同一 VM 中

将 Grails 部署到 AWS 错误 404

IOS / Objective-C:测试图像是不是存在[重复]