【问题标题】:Heroku Rails 4 Assets being precompiled but failingHeroku Rails 4 资产正在预编译但失败
【发布时间】:2015-01-20 11:27:39
【问题描述】:

在我的公共文件夹中的index.html.erb 中,我持有我网站的登录页面。我还没有真正的网站,所以只需要一个着陆页。

这个着陆页有很多图片。图片全部存储在app/assets/images。当我运行git push heroku 时,我的资产会被预编译,从那时起,我的所有图像都在public/assets 文件夹中,格式为imagename-hash.png

在我用作登录页面的index.html.erb 中,我尝试通过<img class="android-device" src=<%= asset_path("nexus_large.png")%> > 访问这些图像,我希望asset_path 能够返回给我nexus_large-hash.png。出于某种原因,它没有。当我进入网页时,我的图像都没有加载。尝试检索资产时出现 404 错误。

我的 Gemfile 中有 rails-12factor 作为宝石。我不明白我做错了什么。

通过heroku run bash,我确认资产已预编译并放入public/assets。通过 Rails 控制台中的helper.asset_path("nexus_large.png"),我确认它应该返回/assets/nexus_large-hash.png

我做错了什么?

编辑:经过进一步检查,如果我要去mywebsite.com/assets/nexus_large-hash.png,我会看到合适的图像。所以100%预编译成功。它链接到失败的图像。

【问题讨论】:

  • 当我用对应的/assets/nexus_large-hash.png 替换/assets/nexus_large.png 时,确实可以看到图像。话虽如此,希望他们不必依赖硬编码所有的哈希值......

标签: ruby-on-rails ruby-on-rails-4 heroku asset-pipeline


【解决方案1】:

我想通了。这归结为想要过度优化而不是以简单的方式做事。

我不想创建另一个控制器来容纳会呈现我的登录页面的空操作。我觉得有更好的方法。所以,我所做的是我使用 Rails 机制来呈现 Public index.html,当它存在并且您位于根目录时。从某种意义上说,它是一个登陆页面。问题是它对 Ruby 没有反应。即使您将其更改为 index.html.erb,它也不会响应您请求的更改。

因此,解决方案非常简单,即使用控制器操作并在您的 routes.rb 中添加 root to: 'controller#action'。然后,所有助手都可以正常工作。

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多