2009-11-22 5 views
13

私はヒロクのstylesheets_link_tagで何が起こっているのか把握しようとしています。herokuのレールアプリは、all.css経由でアセットを提供し、個々のファイルを使用してローカルで配信するのはなぜですか?

私は

= stylesheet_link_tag "style", :cache => true 

を使用している場合はHerokuのは、「all.css」を使用して、スタイルシートをピックアップしていませんが、私は

= stylesheet_link_tag "style", :cache => false 

を使用する場合には、その名の「スタイルを使用して、スタイルシートを提供しています。 css "どうして?

答えて

17

これは、スタイルシートリンクタグでcache => trueを呼び出した結果です。

:cache => trueは、すべてのスタイルシートを取得し、all.cssという1つのファイルに連結します。

Herokuデプロイメントでのみ表示される理由は、Railsアプリケーションが本番モードで実行されている場合にのみ連結all.cssを呼び出すためです。 (

= stylesheet_link_tag "application", "jquery-ui", "style", :cache => true 

開発では、これは、application.css jqueryの-ui.css、とのstyle.cssが含まれます:

したがって、たとえばのは、私は3つのスタイルシートを持っていると私は私のヘッダーに含めるとしましょうその順序で)。

プロダクションでは、3つのファイルのすべてのCSSを(指定された順序で)「all.css」という1つのファイルに連結します。これは含まれている唯一のCSSファイルになります。

プロダクションではHTTP要求が少なくなり、含まれるCSSのファイルサイズが小さくなると、ページの読み込み速度が向上するという利点があります。

編集キャスパーはコメントの中で指摘しているように、Herokuは読み取り専用のファイルシステムを持っています。 Heroku固有のソリューションについては、Heroku Asset Packagerを参照してください。

+1

感謝を(production.rbする場合はtrue config.serve_static_assetsを=追加)? –

+4

Herokuは読み取り専用のデプロイメント環境です。そのため、Railsはall.cssを/ public/stylesheets /に書き込むことができず、自動的に失敗します。 stylesheet_link_tagは、cache => trueを使用している限りall.cssにリンクしているので、ヘロクのスタイルシートをキャッシュしないようにすばやく修正できます。 ここをクリックしてください:http://docs.heroku.com/constraints#read-only-filesystem –

+0

おかげでキャスパーとブライアン –

0

設定:cache => trueを指定すると、リクエストが完全に失敗します。短期のため

私のソリューションは、私は少しCloudFlareの後ろにいるのパフォーマンスについてはあまり心配している私の設定/環境/ prodcution.rb

config.serve_static_assets = true 

に以下を追加することです。私のcssとjsファイルを連結して提供する方法を見つけることは、私のto-doリストにあります。

1

はこれをテストし、それが私のために動作しませんでした、Herokuのは、ピックアップスタイルシートは、キャッシュがtrueに設定されている、正しくない可能性がありますなぜ任意のアイデアを解答用

関連する問題