2012-03-16 3 views
2

私はユーザーが管理ツールを使って新しいテーマを作成できるようにするための作業をしています。管理ツールは別のアプリケーションであり、データベースを介してメインアプリケーションと通信します。私の問題は、私たちのスタイルシートにデータをロードするカスタムSass拡張機能を書いたことですが、それが完了すると、本番環境で資産を再コンパイルできません。プロダクションでのSassアセットの再コンパイル

は、これまでのところ、私はこのための2つの可能性を見てきました:

1.Increment config.assets.versionのバージョンを。だから私はこのコードを持っている:私は、これは資産を再コンパイルするようになりますインクリメント読んだが、それは手でインクリメントされ、サーバーが再起動したときにのみ動作するように思われるものから

MyApp::Application.assets.version = 
     (MyApp::Application.config.assets.version.to_i + .1) 

2.Createコンパイラと古い資産をクリーンアップし、それらを再コンパイルすることを教えてくれ:スプロケット:: Index.expire_indexこと

compiler = Compass::Compiler.new(
        Rails.root.to_s, 
        Compass.configuration.sass_path, 
        Compass.configuration.css_path, 
        {:sass => Compass.sass_engine_options}) 
compiler.clean! 
compiler.run 

この方法では、しかし、私が問題に遭遇します!新しいコンパイラを作成しようとすると、エラーが発生します。

はい、すべてのリクエストで再コンパイルするようにアセットを設定することはできますが、パフォーマンスヒットは必要なものではありません。また、これはテーマなので、データが頻繁に変更されるべきではないので、管理者が新しいテーマを保存するときに再コンパイルするだけで済みます。

最後に、私の質問です:私が欲しいことをする他の方法がありますか?あるいは、私は正しい道を歩いていますか?もしそうなら、どこが間違っていますか?

EDIT: 私は、スタイルシートの値を変更するためにSass関数を使用しているので、プロダクションでコンパイルするオプションをオンにしても機能しません。実際のスタイルシートは決して変更されないためです。

答えて

4

Railsには、アセットのコンパイルを行うRakeタスクがあります。プロダクション環境にアプリケーションをデプロイするたびに一度実行する必要があります。

rake assets:precompile

コンパイル資産はpublic/assetsに出力されます。詳細については、Rails Asset Pipeline Guideをご覧ください。

関連する問題