2

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 ヘルパーを使用しています。

画像タグ

私のレイアウトを見てください:

<!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>
4

2 に答える 2

3

heroku rails 4 スタートアップ ガイド ( https://devcenter.heroku.com/articles/rails4#logging-and-assets)には、次のような gem が必要であると記載されています。

gem 'rails_12factor', group: :production

この gem がないと、アセット パイプラインは機能しません。これで問題が解決しました。

于 2013-09-12T19:27:33.160 に答える
1

表示されているファイル名の背後にあるランダム ID は、プロダクション モードで追加される MD5 フィンガープリントです。これはキャッシュバスティング手法です。そのため、プロダクション モードではファイル名だけで実際にアセットを参照することはできません。したがって、アセットを参照しようとしている場合asset_pathは、少なくとも を使用する必要があります。または、イメージがある場合image_tagは、正しいことを行います。

MD5 フィンガープリントが優れている理由についてのより良い説明は次のとおりです

アセット パスに適切な MD5 フィンガープリントを含めるために使用する必要がある利用可能なヘルパーに関する情報は次のとおりです

于 2013-09-08T18:22:34.450 に答える