4

caches_page で作成されたキャッシュが Capistrano デプロイ後も存続するように Rails を構成することは可能ですか? つまり、パブリック ディレクトリではなく共有ディレクトリにキャッシュを保存するように構成できますか?

4

3 に答える 3

4

受け入れられた答えはOKですが、一般的には、展開時にすべてをコピーするのではなく、キャッシュフォルダーをシンボリックリンクする方が適切です。

このようにして、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"
于 2010-03-09T12:31:28.763 に答える
1

Capistrano は実際には Rails に関連したものではなく、Rails コミュニティが展開のために一般的に使用しているだけです。いいえ、必要なことを行うように「Railsを構成」することはできません。できることは、「現在」としてシンボリックリンクされる前に、シェルコマンドを実行してキャッシュを新しいデプロイメントにコピーするタスクを Capfile に追加することです。

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"

しかし、キャッシュが新しいコードの出力と同期しなくなる可能性が高いため、キャッシュされたページに対してそのようなことをしたいとは思わないでしょう。

于 2010-03-08T23:16:52.747 に答える
0

public/cache ディレクトリを共有下にシンボリックリンクするには、これで十分であることがわかりました。

set :shared_children, shared_children + ["public/cache"]
于 2013-02-10T19:09:42.083 に答える