【问题标题】:How to make Rails caches_page survive a capistrano deploy?如何让 Rails caches_page 在 capistrano 部署中存活下来?
【发布时间】:2010-03-08 21:30:39
【问题描述】:

是否可以配置 Rails 以使使用 caches_page 创建的缓存在 Capistrano 部署中仍然存在?即,我可以将缓存配置为保存到共享目录而不是公共目录中吗?

【问题讨论】:

  • 这可能是个坏主意。如果您更改了生成这些页面的代码,则在缓存自然过期之前您不会看到它。
  • 我理解为什么这可能是一个坏主意,但在这种情况下,我有 很多 由 fleximage 创建的图像,我不希望缓存的版本在每次部署。

标签: ruby-on-rails ruby caching capistrano actioncontroller


【解决方案1】:

接受的答案是可以的,但通常最好不要在部署时复制所有内容,而只是符号链接缓存文件夹。

这样,您可以在 shared/ 目录中创建您的文件夹并在部署时对其进行符号链接,例如:

namespace :deploy do
   desc "Link cache folder to the new release"
   task :link_cache_folder, :roles => :app, :on_error => :continue do
     run "ln -s #{shared_path}/cache #{latest_release}/public/cache"  
   end
end

before "deploy:symlink", "deploy:link_cache_folder"

【讨论】:

    【解决方案2】:

    Capistrano 与 Rails 并不真正相关,它只是被 Rails 社区普遍用于部署。所以不,你不能“配置 Rails”来做你想做的事。您可以做的是向您的 Capfile 添加一个任务,该任务运行 shell 命令以将缓存复制到您的新部署中,然后再将其符号链接为“当前”。

    namespace :deploy do
       desc "Copy cache to the new release"
       task :cache_copy, :roles => :app, :on_error => :continue do
         on_rollback {
           run "rm -rf #{latest_release}/public/cache"
         }
    
         run "cp -a #{current_path}/public/cache #{latest_release}/public"  
       end
    end
    
    before "deploy:symlink", "deploy:cache_copy"
    

    但我真的不认为你会想要对缓存页面做这样的事情,因为缓存可能与新代码的输出不同步。

    【讨论】:

    • 感谢您的帮助。 PS,正如我在上面的评论中提到的 - 我确实理解为什么这可能是一个坏主意,但我确实有充分的理由 :)
    【解决方案3】:

    我发现这足以让 public/cache 目录在 shared 下符号链接:

    set :shared_children, shared_children + ["public/cache"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2015-03-07
      • 1970-01-01
      • 2011-09-05
      相关资源
      最近更新 更多