【问题标题】:Asset are not show after deploy - heroku - rails 4部署后不显示资产-heroku-rails 4
【发布时间】:2013-09-12 06:29:08
【问题描述】:

我正在 Rails 4 中开发一个测试应用程序,并希望将其托管在 heroku 上。问题是我似乎无法显示资产,而这在我的本地系统上运行良好。

查看以下链接:http://depot-test.herokuapp.com/ > 所有资产的文件名后面都有一些随机 ID。

首先我检查了资源库中实际可用的资产,它们是。

然后我用 bash 检查了 heroku 上的资产是否可用:

$ heroku run bash

$ ls -la app/assets/images

total 60
drwx------ 2 u41129 41129  4096 2013-09-08 17:27 .
drwx------ 5 u41129 41129  4096 2013-09-08 17:27 ..
-rw------- 1 u41129 41129 15093 2013-09-08 17:27 cs.jpg
-rw------- 1 u41129 41129     0 2013-09-08 17:27 .keep
-rw------- 1 u41129 41129  1040 2013-09-08 17:27 logo.png
-rw------- 1 u41129 41129  1787 2013-09-08 17:27 rails.png
-rw------- 1 u41129 41129  9882 2013-09-08 17:27 rtp.jpg
-rw------- 1 u41129 41129 12549 2013-09-08 17:27 ruby.jpg

如你所见。

然后我尝试直接加载图片,http://depot-test.herokuapp.com/assets/logo.png > 404

我想知道是什么导致了 id 被添加。

更新

哈希显然是由 rails 创建的,但仍然没有加载资产。我正在使用标准的 rails 助手,例如:

图像标签

查看我的布局:

<!DOCTYPE html>
<html>
    <head>
        <title>Pragprog Books Online Store</title>
        <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
        <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
        <%= csrf_meta_tags %>
    </head>
    <body class="<%= controller.controller_name %>">
        <div id="banner">
            <%= image_tag("logo.png") %>
            <%= @page_title || "Pragmatic Bookshelf" %>
        </div>
        <div id="columns">
            <div id="side">

                <% if @cart %>
                    <%= hidden_div_if(@cart.line_items.empty?, id: 'cart') do %>
                      <%= render @cart %>
                    <% end %>
                <% end %>

                <ul>
                    <li><a href="http://www....">Home</a></li>
                    <li><a href="http://www..../faq">Questions</a></li>
                    <li><a href="http://www..../news">News</a></li>
                    <li><a href="http://www..../contact">Contact</a></li>
                </ul>

                <!-- Exersise of showing current time -->
                <span><%= Time.now.strftime("%I:%M:%S %z") %></span>
                <!-- End showing time -->

            </div>
            <div id="main">
                <%= yield %>
            </div>
        </div>
    </body>
</html>

【问题讨论】:

    标签: ruby-on-rails ruby heroku deployment


    【解决方案1】:

    在 heroku rails 4 启动指南中,https://devcenter.heroku.com/articles/rails4#logging-and-assets 声明您需要一个名为:

    gem 'rails_12factor', group: :production
    

    没有这个 gem,资产管道将无法工作。这解决了我的问题。

    【讨论】:

      【解决方案2】:

      您看到的文件名后面的随机 id 是 MD5 指纹,它是在生产模式中添加的。这是一种缓存清除技术。因此,您实际上不能在生产模式下仅通过文件名来引用资产。因此,无论您在哪里尝试引用资产,都至少需要使用asset_path。或者,如果您有图片,那么 image_tag 会为您做正确的事情。

      这里有一个更好的解释为什么 MD5 指纹是一件好事:http://guides.rubyonrails.org/asset_pipeline.html#what-is-fingerprinting-and-why-should-i-care-questionmark

      以下是有关在资产路径中包含正确 MD5 指纹时必须使用的可用助手的信息:http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

      【讨论】:

      • 我正在使用 image_tag 和 stylesheet_link_tag 但仍然:&lt;%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" =&gt; true %&gt;&lt;%= image_tag("logo.png") %&gt;
      • 哦,我明白了。 /public/assets/ 有图片吗?在部署时预编译时,它们应该使用 MD5 指纹添加到那里。
      • 是的,看我的描述,资产可用但哈希不可用。可能是配置问题。
      • 我看到你的帖子显示图片在/app/assets/images 中可用。我要求确保它们在/public/assets 中也可用。如果不存在,则表明资产编译没有完成它的工作。
      • 我检查了ls public/assets,所有文件都在那里:application-92dbc19d57295c6a6955b0d601b06a87.css application-92dbc19d57295c6a6955b0d601b06a87.css.gz application-ef4411259f5126a9b708b438a3127916.js application-ef4411259f5126a9b708b438a3127916.js.gz cs-9b4db6d356419270ca9287e7d47b5194.jpg jquery-ui logo-5c3d903e6266216a6ace3674859357d4.png manifest-ace1898588bb167cdbf124b459ecc495.json rails-e40800d43b04b250ef69510bb4362202.png rtp-11d671c3908c8ee16ded081eb9b6bc1f.jpg ruby-e73d7acb88dd4015ccce0e98c75c677f.jpg
      猜你喜欢
      • 1970-01-01
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2023-04-06
      • 2019-10-27
      相关资源
      最近更新 更多