質問: railsでウェブサーバを運営しております。登録ユーザの管理するページはフォームを使って、フォントサイズや文字色を変更できるようにしているのですが、変更がリアルタイムで反映されません。 デプロイするかサーバを再起動するとはじめてCSSの更新内容が反映されます。そうした再起動無しにユーザが入力したら、それが反映させるにはどうすればいいのでしょうか? 一応、バックグラウンドでrake assets:precompileを実行しているので、新しいフィンガープリントの入ったCSSはpublic/assets配下に作成されています。なのにウェブブラウザで確認しても新しいスタイルシートになっておりません。なぜでしょうか?
回答: 具体的にプログラムがどうなっているのかわからないので、一般的と思われる範囲で話します。 ユーザーがCSSを変更してそれを即座に反映させようとするなら、assets pipeline を使うやり方だと難しいかもしれませんね。 ただプリコンパイルのオプションに`config.assets.compile`というのがあり、これを`true`にすると「ライブコンパイル」するとrails guideに書かれているので、もしかするとこれを設定すればうまく意図したことができるかもしれません。 ただし「ライブ」といってもページのリロードは必要になります。 > > config.assets.compile is a boolean that can be used to turn on live Sprockets compilation in production. > > (Rails Guideより引用) > > > 他の手としては、ユーザーの指定したCSSの内容をDB等に格納し、その内容をページのstyleタグに記載するというやり方が考えられます。 CSSをブラウザにキャッシュさせられない欠点がありますが、上記assetsのプリコンパイルの結果に左右されないという点では確実であるとも思います。 もしjavascriptを使うのであれば、変更をリアルタイムに反映させつつ、変更したCSSの内容をajaxを使うことで保存することも可能になるのではないかと。