2

我正在使用Passenger and Rails:cache => true将我所有的css 缓存到一个大文件中。部署是通过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

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

touch tmp/restart.txt

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

您当前的 deploy:restart 任务是什么样的?

于 2009-11-02T15:34:58.883 回答
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 回答