web-dev-qa-db-ja.com

herokuにデプロイした後にRailsキャッシュをクリアするにはどうすればよいですか?

私は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"

杉のアプリでは動作しません。

この問題を解決するにはどうすればよいですか?

ありがとう。

35
kikiki.blue

Railsには組み込みのrakeタスクがあります:

rake tmp:clear
42
gabeodess

次は杉で動作するはずです:

heroku run console

..その後、herokuコンソールが起動するまで5秒待ちます

Rails.cache.clear

その後、キャッシュがクリアされ、コンソールを終了できます。ローカルマシンは多くの場合、新しいリクエストを行うまでアセットなどをブラウザにキャッシュするため、数回更新する必要がある場合があることに注意してください。

ただし、キャッシュしているアセットである場合は、プッシュするたびに手動でクリアする必要はありません。アセットパイプラインを設定し、すべてのjs/css(less/sass)/ staticイメージは、ファイル名の最後にハッシュを付けてコンパイルされています。

37
a.ross.cohen

次のようなキャッシュクリアrakeタスクを作成できるはずです。

namespace :cache do
  desc "Clears Rails cache"
  task :clear => :environment do
    Rails.cache.clear
  end
end

デプロイ後のフックで使用できる1つのコマンドで直接呼び出します。次のようになります。

heroku run rake cache:clear
30
Ivar

Ruby on Railsには 'Rails_CACHE_ID'と呼ばれる魔法のENV変数があります。これをデプロイするたびにgit commit idに設定します:heroku config:set Rails_CACHE_ID=$CIRCLE_SHA1

13
nthj

デプロイ後に単に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

5
rvirani

heroku run rake tmp:cache:clear

http://guides.rubyonrails.org/command_line.html#tmp

Herokuは現在、デプロイ後に発生するアクションのパイプラインをサポートしていません。展開中に発生するステップのレシピを作成するには、CodeshipやTravisCIなどが必要です。

開示:私はコードシップの顧客です。

0
Jonathan Mui