37

我将缓存应用于我的 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"

不适用于雪松应用程序。

我怎么解决这个问题?

谢谢。

4

8 回答 8

43

Rails 有一个内置的 rake 任务:

rake tmp:clear
于 2013-05-28T18:29:23.750 回答
39

以下应该适用于雪松:

heroku run console

..然后等待 5 秒钟让 heroku 控制台启动

Rails.cache.clear

然后你应该看到缓存被清除了,你可以退出控制台。请记住,您可能需要刷新几次,因为您的本地计算机通常会在您的浏览器中缓存资产等,直到它发出新的请求。

如果它碰巧是你正在缓存的资产,你不需要在每次推送时都手动清除,你只需要设置资产管道并确保你所有的 js/css(less/ sass)/static 图像在其文件名末尾使用散列进行编译。

于 2012-08-19T17:52:18.343 回答
31

您应该能够创建如下所示的缓存清除 rake 任务:

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

并在一个可以在部署后挂钩中使用的命令中直接调用它 - 如下所示:

heroku run rake cache:clear
于 2012-12-11T01:15:11.100 回答
14

Ruby on Rails 有一个神奇的 ENV 变量,称为“RAILS_CACHE_ID”。每当我部署时,我都会将其设置为 git commit id:heroku config:set RAILS_CACHE_ID=$CIRCLE_SHA1

于 2014-01-15T18:48:45.847 回答
4

如果您想在部署后简单地运行 rake 任务,我建议您查看:

https://github.com/gunpowderlabs/buildpack-ruby-rake-deploy-tasks

我们已经在生产中使用它超过 6 个月了,它一直坚如磐石。

首先,在你已经设置好 Ruby buildpack 之后添加 buildpack。这应该在您第一次部署到服务器后发生

heroku buildpacks:add https://github.com/gunpowderlabs/buildpack-ruby-rake-deploy-tasks

其次,设置一个名为的环境变量DEPLOY_TASKS,其中只使用您要运行的 rake 任务的名称,并用空格分隔。

heroku config:set DEPLOY_TASKS='cache:clear

于 2017-01-06T23:43:14.570 回答
0

heroku 运行 rake tmp:cache:clear

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

于 2015-07-15T17:40:49.993 回答
0

Heroku 有一个releasephase,这意味着您可以将任何部署时任务放入您的Procfile:

release: bundle exec rake tmp:clear

您可能希望设置自己的自定义 rake 任务来封装需要在部署时发生的任何其他任务,例如:db:migrate等等。请记住,如果任务因任何原因失败,Heroku 将停止部署,并且之前部署的代码版本将保持活动状态。

于 2021-03-08T22:47:51.990 回答
0

Heroku 目前不支持部署后发生的一系列操作。您将需要 Codeship 或 TravisCI 之类的东西来创建部署期间发生的步骤配方

披露:我是 Codeship 的客户。

于 2016-02-13T20:55:45.343 回答