我将缓存应用到我的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"
不适用于雪松应用。
我该如何解决这个问题?
感谢。
答案 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
答案 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
答案 6 :(得分:0)
Heroku当前不支持部署后发生的一系列操作。您需要像Codeship或TravisCI这样的东西来创建部署期间发生的步骤配方
披露:我是Codeship的客户。
答案 7 :(得分:0)
Heroku has a release
phase,这意味着您可以将任何部署时任务放在您的 Procfile
中:
release: bundle exec rake tmp:clear
您可能想要设置自己的自定义 rake 任务来封装任何其他需要在部署时发生的任务,例如:db:migrate
等。请记住,如果任务因任何原因失败,Heroku 将停止部署,并且之前部署的代码版本将保持活动状态。