2

Passengerと Railsを使用:cache => trueして、すべての CSS を 1 つの大きなファイルにキャッシュしています。デプロイはCapistrano経由で行われます。

時々 (!)、all.cssアプリの再起動後に mem で生成されたファイルが見つからない (ログにエラーが記録される)

ActionController::RoutingError (No route matches "/stylesheets/all.css" with {:method=>:get}):
  passenger (2.2.2) lib/phusion_passenger/rack/request_handler.rb:81:in `process_request'
  passenger (2.2.2) lib/phusion_passenger/abstract_request_handler.rb:203:in `main_loop'

別のrestart.txtファイルを手動で配置するかcap deploy:restart、問題を解決します。

大したことではありませんが、チェックして修正するのは常に面倒です。誰かが私が間違っていることを知っていますか?

編集

deploy:restartはこのように見えます(まさに私が手動で行っていることです)。

desc "Restarting mod_rails with restart.txt"
task :restart, :roles => :app, :except => { :no_release => true } do
  run "touch #{current_path}/tmp/restart.txt"
end

また、キャッシュに特別な (外部) CSS ファイルを使用していません。

<%= stylesheet_link_tag "clear", "application", "contracts", :cache => true %>
4

2 に答える 2

1

この特定の問題は、キャッシュ オプションを含むスタイルシートのリストに少なくとも 1 つの外部スタイルシートが含まれている場合に発生します。アプリを初めて起動したときにのみ発生します。

stylesheet_link_tag "foo.css", "/bar.css", "http://example.org/file.css", :cache => true
# crash
stylesheet_link_tag "foo.css", "/bar.css", :cache => true
# OK
于 2009-11-02T15:49:53.563 に答える
1

デプロイの最後に、( deploy:restart タスクの一部として) 以下を実行する必要があります。

touch tmp/restart.txt

これにより、Passenger は、新しいコードのために Rails スタックをリロードする必要があることを認識し、最初のリクエストで新しいスタイルシートがキャッシュされます。

現在の deploy:restart タスクはどのようなものですか?

于 2009-11-02T15:34:58.883 に答える