部署到heroku后如何清除rails缓存?

时间:2012-08-19 16:28:22

标签: ruby-on-rails caching deployment heroku clear

我将缓存应用到我的heroku rails应用程序,它运行良好。 但每次我部署到heroku时,我也想自动清除缓存。

所以我用Google搜索,我发现了这一点。

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"

不适用于雪松应用。

我该如何解决这个问题?

感谢。

8 个答案:

答案 0 :(得分:41)

Rails有一个内置的rake任务:

rake tmp:clear

答案 1 :(得分:37)

以下应该适用于雪松:

heroku run console

..然后等待5秒钟,以便heroku控制台启动

Rails.cache.clear

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

如果它恰好是您正在缓存的资产,那么每次推送时都不需要通过手动清除,只需要设置资产管道并确保所有资产您的js / css(less / sass)/静态图像正在使用文件名末尾的哈希进行编译。

答案 2 :(得分:28)

您应该能够创建一个类似于此的缓存清除rake任务:

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

并直接在一个可以在post deploy hook中使用的命令中调用它 - 就像这样:

heroku run rake cache:clear

答案 3 :(得分:13)

Ruby on Rails有一个神奇的ENV变量叫做'RAILS_CACHE_ID'。每当我部署heroku config:set RAILS_CACHE_ID=$CIRCLE_SHA1

时,我都会将其设置为git commit id

答案 4 :(得分:5)

如果您只想在部署后运行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

答案 5 :(得分:0)

heroku run rake tmp:cache:clear

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

答案 6 :(得分:0)

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

披露:我是Codeship的客户。

答案 7 :(得分:0)

Heroku has a release phase,这意味着您可以将任何部署时任务放在您的 Procfile 中:

release: bundle exec rake tmp:clear

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