代码之家  ›  专栏  ›  技术社区  ›  Marcel Jackwerth

使用Passenger配置Rails CSS缓存

  •  2
  • Marcel Jackwerth  · 技术社区  · 15 年前

    乘客 和Rails' :cache => true 将所有css缓存到一个大文件中。部署是通过 卡皮斯特拉诺

    现在有时候(!),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 回复  |  直到 15 年前
        1
  •  1
  •   bensie    15 年前

    在部署结束时,您应该正在运行(作为部署:重新启动任务的一部分):

    touch tmp/restart.txt
    

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

    您当前的部署:重新启动任务是什么样子的?

        2
  •  1
  •   Simone Carletti    15 年前

    当带有缓存选项的样式表列表至少包含一个外部样式表时,会导致此特定问题。它只在应用程序第一次启动时发生。

    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
    
    推荐文章