私はheroku Railsアプリにキャッシュを適用しましたが、うまく機能します。しかし、herokuにデプロイするたびに、キャッシュを自動的にクリアしたいです。
だから私はグーグルでこれを見つけました。
task :after_deploy, :env, :branch do |t, args|
puts "Deployment Complete"
puts "Cleaning all cache...."
FileUtils.cd Rails.root do
sh %{heroku run console}
sh %{Rails.cache.clear}
end
end
しかし、このスクリプトをレイクすると、herokuコンソールのコマンドラインが表示されますが、Rails.cache.clearコマンドは入力されません。 (これはherokuコンソールがインタラクティブだからだと思います)
そして
system "heroku console Rails.cache.clear"
杉のアプリでは動作しません。
この問題を解決するにはどうすればよいですか?
ありがとう。
Railsには組み込みのrakeタスクがあります:
rake tmp:clear
次は杉で動作するはずです:
heroku run console
..その後、herokuコンソールが起動するまで5秒待ちます
Rails.cache.clear
その後、キャッシュがクリアされ、コンソールを終了できます。ローカルマシンは多くの場合、新しいリクエストを行うまでアセットなどをブラウザにキャッシュするため、数回更新する必要がある場合があることに注意してください。
ただし、キャッシュしているアセットである場合は、プッシュするたびに手動でクリアする必要はありません。アセットパイプラインを設定し、すべてのjs/css(less/sass)/ staticイメージは、ファイル名の最後にハッシュを付けてコンパイルされています。
次のようなキャッシュクリアrakeタスクを作成できるはずです。
namespace :cache do
desc "Clears Rails cache"
task :clear => :environment do
Rails.cache.clear
end
end
デプロイ後のフックで使用できる1つのコマンドで直接呼び出します。次のようになります。
heroku run rake cache:clear
Ruby on Railsには 'Rails_CACHE_ID'と呼ばれる魔法のENV変数があります。これをデプロイするたびにgit commit idに設定します:heroku config:set Rails_CACHE_ID=$CIRCLE_SHA1
デプロイ後に単にrakeタスクを実行したい場合は、チェックアウトすることをお勧めします。
https://github.com/gunpowderlabs/buildpack-Ruby-rake-deploy-tasks
私たちは6か月以上にわたって本番環境で使用しており、非常に安定しています。
まず、すでにRubyビルドパックが設定されている後、ビルドパックを追加します。これは、サーバーへの最初のデプロイ後に発生します。
heroku buildpacks:add https://github.com/gunpowderlabs/buildpack-Ruby-rake-deploy-tasks
次に、DEPLOY_TASKS
という環境変数を、実行するrakeタスクの名前だけをスペースで区切って設定します。
heroku config:set DEPLOY_TASKS='cache:clear
heroku run rake tmp:cache:clear
Herokuは現在、デプロイ後に発生するアクションのパイプラインをサポートしていません。展開中に発生するステップのレシピを作成するには、CodeshipやTravisCIなどが必要です。
開示:私はコードシップの顧客です。