我正在使用 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 %>
答案 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