4

最近、アプリを heroku にデプロイしましたが、jquery-raty で定義されているイメージを除いて、すべて正常に動作しています。基本的に、この gem を使用すると、評価システムを (視覚的に) 簡単に実装できます。

heroku にプッシュすると、アセットがプリコンパイルされ、jquery-raty で動作するように指定したイメージが正常にコンパイルされ、名前が変更されていることがわかります (つまり、image.png が image-f96e0d1182b422c912116f08ac8f7d78.png になります)。すべて順調ですが、heroku にデプロイすると、この新しい名前が反映されないことがわかりました。つまり、画像はhttps://myapp.herokuapp.com/assets/image-f96e0d1182b422c912116f08ac8f7d78.pngではなく、https://myapp.herokuapp.com/assets/image.pngから取得しようとしています。

これは私の問題です。この時点では、URL を正しく指す方法がわかりません。

他の誰かがこれに対する解決策を見つけましたか??

ありがとうございました。

4

3 に答える 3

3

基本的に、Rails のアセット パイプライン プリコンパイル機能を使用する際の落とし穴の 1 つを経験しています。これにより、画像やその他のメディアにハッシュが与えられます。これらのアセットの参照は、対応するために動的でなければなりません

問題は、アセットをプリコンパイルするときに、.css ファイル内の静的リンクが .css のみを指すことurl(/assets/image.png)です。ただし、本当に必要なのは、asset_pathまたはasset_urlヘルパーを使用して、そのリンクを動的にレンダリングすることです。

解決策はSCSSです

私たちはこの問題を抱えていました ( asset syncgem を使用しています)。これを解決する最善の方法は、アセット パスを動的にレンダリングする SCSS であることがわかりました。コードの一部を次に示します。

#app/assets/stylesheets/application.css.scss (yes, you should change it)
@import 'layout/fonts';

#app/assets/stylesheets/layout/fonnts.css.scss
@font-face {
    font-family: 'akagi';
    src: asset_url('fonts/akagi-th-webfont.eot');
    src: asset_url('fonts/akagi-th-webfont.eot?#iefix') format('embedded-opentype'),
         asset_url('fonts/akagi-th-webfont.woff') format('woff'),
         asset_url('fonts/akagi-th-webfont.ttf') format('truetype'),
         asset_url('fonts/akagi-th-webfont.svg#akagithin') format('svg');
    font-weight: 300;
    font-style: normal;
}

の使用方法を参照してくださいasset_url

これにより、rake は古いパスではなく、コンパイル時にアセットへの新しいパスを定義することができます。つまり、実行すると、rake assets:precompileすべての正しい参照が取得されます。

アセットをコンパイルするときはいつでも、次のプリコンパイル プロセスを使用することをお勧めします。

rake assets:precompile RAILS_ENV=production

... Heroku にアップロードすると、次のようになります。

heroku run rake assets:precompile --app [your app]
于 2013-10-21T08:24:35.550 に答える
2

Rails 4 を使用している場合

静的アセットはフィンガープリントなしで参照されます。したがって、アセットは 404 になります。Rails 4 以降、ダイジェスト オプションはデフォルトで false に設定されています。 https://github.com/rails/rails/issues/11482

推奨される解決策ではありませんが、消化されたアセットと消化されていないアセットの両方をpublicフォルダーに入れることができます。

これはあなたのためにタスクを行うかもしれません - https://github.com/alexspeller/non-stupid-digest-assets

これも見たいかもしれません https://github.com/rails/sprockets-rails/issues/49

于 2013-10-21T08:31:39.683 に答える
2

私の質問に答えてくれた@Rich Peck、@swap.nilなどに感謝します。昨日数時間これをいじった後、私は最初にやるべきだったことをすることにしました。

...本質的に、動的にレンダリングされたURLの使用に関して@Rich Peckが言及したことが鍵でした。これを実現するには、.js.coffee ファイルを .js.coffee.erb ファイルに変更し、"<%= asset_path('my-image.png') %>"ファイルの適切な URL をレンダリングするために使用するだけで済みました。それをしたら、すべてが機能していました。アセットを手動でプリコンパイルすることに関しては、何もする必要はありませんでした。私はまだ heroku にこれを自動的に実行させています。

これを理解するためのみんなのサポートにもう一度感謝します:)

于 2013-10-21T17:09:20.090 に答える