49

Rails 3.1 アプリの vendor/assets/images に外部イメージ (jQuery プラグインで使用) を配置しようとしています。問題は、私が次のようなことをしようとしたときです:

<%= 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 に配置すると、すべてが機能します。

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

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

4

4 に答える 4

79

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

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

于 2011-09-20T03:25:29.310 に答える
22

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

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

于 2011-09-06T18:56:36.947 に答える
9

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

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 つの場所に存在するサブディレクトリは、Sprockets の検索パスに追加されます (コンソールで Rails.application.config.assets.paths を呼び出すと表示されます)。アセットが要求されると、これらのパスが調べられ、指定された名前に一致するアセットが含まれているかどうかが確認されます。アセットが見つかると、Sprockets によって処理され、提供されます。

私は自分のアプリの例でテストしましたが、あなたと同じ構文が機能します。アセットの名前にタイプミスがある可能性があります。

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

于 2011-07-03T14:51:26.330 に答える
2

/assets/images に別のフォルダーを作成する必要があるかもしれません。「images」という名前を付けてから、すべての jquery-ui 画像をコピーして、以前に作成した「images」フォルダーに貼り付けます。うまくいけば、これはあなたを助けるでしょう.

于 2012-03-09T09:04:36.140 に答える