17

Railsでオーディオファイルを使用しようとしています。audiosの下にフォルダを作成しましたapp\assets\。ファイルを下に置く必要がないように、アセットのプリコンパイルを使用したいapp\public

今、私は得ています

ActionController::RoutingError (No route matches [GET] "/audios/audio_file.wav")

URLをからに変更URL/audios/audio_file.wavするURL/assets/audio_file.wavと機能します。どうすれば問題を解決できますか? 正しい方法は何ですか?

4

1 に答える 1

26

最初に、まだ気付いていない場合のために説明します。新しいapp/assets/audiosフォルダーは既にロード パスにあります。Sprockets がそれを取得するには、サーバーを再起動するだけです。

開発中のアセットは、相対 URL: で利用できます/assets/<asset file name>

たとえば、wav ファイルがファイル システムの にあると仮定すると、ブラウザ/app/assets/audios/audio_file.wavの相対 URL でアクセスできます。/assets/audio_file.wavこれは、Sprockets/Dev-Rails が、/app/assetsアセットを見つけるときにフォルダーとそのサブディレクトリを検索することを認識しているためです。

productionでは、アセットのプリコンパイル (通常) はデプロイ時に行われます。この時点で、wav ファイルは eg/public/assets/audio_file-<MD5 fingerprint>.wavにコピーされ、相対 URL: でアクセスできます/assets/audio_file-<MD5 fingerprint>.wav

開発と本番で使用される命名スタイルが異なるため、アセットを参照する場合はいつでもヘルパー メソッドを使用する必要があります (CSS の場合でも!)。つまり、製品には MD5 フィンガープリントが含まれますが、開発には含まれません。しかし、ヘルパーを使用している限り、そのことを心配する必要はありません:

  • 画像の場合: <%= image_tag('homes/logo.png') %>-- ファイル システムに存在する画像ファイルを指定し/app/assets/images/homes/logo.pngます。
  • オーディオ ファイルなどの非標準アセットの場合:<%= asset_path('audio_file.wav') %>の相対パスが生成されます/assets/audio_file.wav
于 2013-08-31T21:02:15.923 に答える