使用Passenger配置Rails CSS缓存

时间:2009-11-02 15:29:06

标签: ruby-on-rails caching passenger mod-rails

我正在使用 Passenger 和Rails':cache => true将我的所有css缓存到一个大文件中。部署是通过 Capistrano 完成的。

现在有时(!),在重新启动应用程序后找不到mem生成的all.css文件(我在日志中收到错误)

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 %>

2 个答案:

答案 0 :(得分:1)

在部署结束时,您应该正在运行(作为deploy:restart任务的一部分):

touch tmp/restart.txt

这将让Passenger知道需要为新代码重新加载Rails堆栈,新的样式表将在第一次请求时缓存。

您当前的部署是什么:重启任务看起来像什么?

答案 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