web-dev-qa-db-ja.com

Rails 3.1 vendor / assets / imagesから画像を提供する

私のRails 3.1アプリ。

<%= image_tag "ui-bg_flat_75_ffffff_40x100.png" %>

エラーが発生します:

No route matches [GET] "/assets/ui-bg_flat_75_ffffff_40x100.png"

Rails.application.config.assets.pathsをチェックすると、次のディレクトリがリストされています。

..../app/assets/images
..../app/assets/javascripts
..../app/assets/stylesheets
..../vendor/assets/images
..../vendor/assets/stylesheets
..../.rvm/gems/Ruby-1.9.2-p180@mygems/gems/jquery-Rails-1.0.9/vendor/assets/javascripts

ご覧の通り、/ vendor/assets/imagesがリストされています。私の画像をapp/assets/imagesに置くと、すべてが機能します。

新しいアセットパイプラインは、すべてのアセットディレクトリを通過し、要求されたファイルを見つけた場所で提供することになっていると思いました。

誰もがここで何が問題なのか知っていますか?

50

vendor/assets/imagesディレクトリを作成した後、Railsサーバーを再起動する必要がありました。この前に、私はあなたと同じエラーを見ていました(「ルートが一致しない[GET]」)。

私の推測では、Railsサーバーは、最初に起動したときにこれらのディレクトリが存在していなかった場合、これらのディレクトリをチェックしません。問題を診断するためにRailsコンソールを開くと、Railsの新しいインスタンスを取得します。このインスタンスは、ディレクトリを認識しますが、混乱を招くだけです。

80
Adrian Macneil

JQuery UI Theme Rollerテーマを使用している場合、問題はjquery-ui cssファイルでサブフォルダー「images」内で画像が参照されることです。

つまり画像をフォルダに入れる必要があります'./app/assets/images/images'またはjquery-ui cssファイルを編集して、「images /」フォルダープレフィックスを削除する必要があります。

22
woelfle

アセットパイプラインについては、このRails Ryan Biggによるガイド(現時点ではドラフトステータス)で説明しています。

http://ryanbigg.com/guides/asset_pipeline.html および http://ryanbigg.com/2011/06/sprocket-asset-tags-internals/ 参照。

これによると、あなたの例はうまくいくはずです。

エキス:

アセットは、app/assets、lib/assets、vendor/assetsの3つの場所のいずれかのアプリケーション内に配置できます。

app/assetsは、カスタム画像、javascriptファイル、スタイルシートなど、アプリケーションが所有するアセット用です。

lib/assetsは、アプリケーションまたはアプリケーション間で共有されるライブラリの範囲に実際には収まらない独自のライブラリのコード用です。

vendor/assetsは、JavaScriptプラグインのコードなど、外部エンティティが所有するアセット用です。

これらの3つの場所に存在するサブディレクトリは、スプロケットの検索パスに追加されます(コンソールでRails.application.config.assets.pathsを呼び出すことで表示されます)。アセットがリクエストされると、これらのパスを調べて、指定された名前に一致するアセットが含まれているかどうかが確認されます。アセットが見つかると、スプロケットによって処理されてから配信されます。

私は私のアプリのサンプルとあなたの作品と同じ構文でテストしました。アセットの名前にタイプミスがあるかもしれません。

Martinの場合:コンソールでRails.application.config.assets.pathsを呼び出すと、スプロケットの検索パスが表示されます。

9
vincent jacquel

たぶん、/ assets/imagesに別のフォルダーを作成する必要があります。 「images」という名前を付けてから、すべてのjquery-uiイメージをコピーして、前に作成した「images」フォルダーに貼り付けます。これがお役に立てば幸いです。

2
daynRails