2011-10-05 3 views
12

私はRails 3.1アプリケーションを開発中です。私はapplication.css.scss.erbファイルを作成しました。私はCSSの色変数として設定ファイルから変数をロードするため.erbは終わりである:アセットパイプラインのキャッシュCSS?

$highlight1: #<%= COLOR.highlight1 %>; 
$highlight2: #<%= COLOR.highlight2 %>; 

すべてが正常に動作しますが、私が午前問題は、私は値を変更するたびにということですCOLOR.highlight1の内部では、私は自分のcssファイルに移動して何かを変更するまで変更を反映しません(通常はスペースを追加して保存します)。私はその変化を見ると思う。レールが変更を更新するためにファイルが変更されたかどうかを確認するのは明らかです。

少なくとも開発中はこれをオフにすることはできますか?また、CSSファイルを変更しなくても変更を確認できますか?

私の技術上の任意の批判/意見も多分試みる

+0

、なぜあなたは定数でこれを格納する必要がありますか? – nfm

+0

実際、私は、LESSが必要なTwitter Bootstrapを含める必要がありました。ちょっとストーリーが短いので、私は色を宣言してSASS(私のアプリケーションで使用されているもの)の値とLESSの値(これはTwitter Bootstrapが動作するもの) 。意味がありますか? – alik

+0

ガードを使ってあなたのルビーファイルを見てみてください。 - http://railscasts.com/episodes/264-guard – house9

答えて

0

を歓迎しています

config.assets.digest = true 

開発設定ファイルの

+0

hmm、うまくいきませんでした。 – alik

7

スプロケットdepend_onディレクティブは、依存関係のこれらの種類を宣言するために使用されます。ときに、ファイル/path/to/colors.rb変更すると、それはあまりにも更新するようにCSSを強制します

//= depend_on "/path/to/colors.rb" 

:だから、他のディレクティブ(必要と友人)を使用してcss.scss.erbファイルの先頭、に、のようなものを置きます。

は、残念ながら、私は資産ディレクトリの1つの外ファイル(JavaScriptの/スタイルシート/画像)への相対パスで動作するようにこれを得たことがないので、これを防止スプロケットがパスを解決する方法で何かがあるかもしれません、そうでなければ私は何かを欠いている。そのため、絶対パスを指定するオプションが残っています。絶対パスはすべてのアプリケーション環境で機能しません。また、定数ファイルをアセットディレクトリ(app/assets/stylesheets/colors.rbなど)に置くこともできます。参考のため

は、ここではスプロケットに、スプロケットからdepend_onディレクティブ(2.0.3)ソースのドキュメントだ/ directive_processor.rb

# Allows you to state a dependency on a file without 
    # including it. 
    # 
    # This is used for caching purposes. Any changes made to 
    # the dependency file will invalidate the cache of the 
    # source file. 
    # 
    # This is useful if you are using ERB and File.read to pull 
    # in contents from another file. 
    # 
    #  //= depend_on "foo.png" 
    # 

誰もが他の場所への相対パスを指定する方法を知っていなければ

設定/初期化子のようなもの、私に教えてください!

+1

[以下の回答:http: /stackoverflow.com/a/10596268/235855)を参照してください。 –

0

http://guides.rubyonrails.org/configuring.html

  • config.assets.compileは生産にライブスプロケットコンパイルをオンにするために使用することができますブール値です。

、私はそのががコンパイルされ、リアルタイムに取得した場合、少なくともそれはキャッシュを無効にする必要がありますかわからないことをしようとする場合があります。

3

David Faberの回答に加えて、私は相対パスも使用する必要がありました。

私はロケールファイルが変更された場合に更新してしまうロケール辞書、とJSファイルを生成したい:

//= depend_on "../../../config/locales/en.yml" 
//= depend_on "../../../config/locales/ja.yml" 

var locales = <%= locales.to_json %>; 

が相対的ならば、現在(Railsの3.2.3)、相対パスにのみ動作していることが判明パスはアセットパスにもあります!

ので醜いソリューションがconfig/application.rbにパスを追加することです:

config.assets.paths.unshift Rails.root.join("config", "locales").to_s 
0

私はこれを試してみてください、それはlibに/ assets_variables /色でapplication.rb

config.autoload_paths += %W(#{config.root}/lib/assets_variables) 
config.assets.paths << File.join(Rails.root, 'lib', 'assets_variables') 

を働きます.rb

module Color 
    def self.default 
    'blue' 
    end 
end 
好奇心のうち、アプリ/資産/スタイルシート/ color.css.scss.erbで

//= depend_on "color.rb" 
$default_color: <%= Color::default %>; 
.content { 
    color: $default_color; 
} 
関連する問題