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

kik*_*lue 35 deployment caching ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

但是当我翻阅这个脚本时,它只显示了heroku控制台命令行,但是Rails.cache.clear命令没有输入.(我猜这是因为heroku控制台是互动的)

system "heroku console Rails.cache.clear"
Run Code Online (Sandbox Code Playgroud)

不适用于雪松应用程序.

我怎么解决这个问题?

谢谢.

gab*_*ess 42

Rails有一个内置的rake任务:

rake tmp:clear
Run Code Online (Sandbox Code Playgroud)

  • 所以只需使用:heroku run rake tmp:clear (10认同)

小智 37

以下应该适用于雪松:

heroku run console
Run Code Online (Sandbox Code Playgroud)

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

Rails.cache.clear
Run Code Online (Sandbox Code Playgroud)

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

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


Iva*_*var 30

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

namespace :cache do
  desc "Clears Rails cache"
  task :clear => :environment do
    Rails.cache.clear
  end
end
Run Code Online (Sandbox Code Playgroud)

并在一个命令中直接调用它,您可以在post deploy hook中使用它 - 如下所示:

heroku run rake cache:clear
Run Code Online (Sandbox Code Playgroud)


nth*_*thj 13

Ruby on Rails有一个神奇的ENV变量叫做'RAILS_CACHE_ID'.我在部署时将其设置为git commit id:heroku config:set RAILS_CACHE_ID=$CIRCLE_SHA1


小智 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

  • 这是最好的方法,应标记为已接受的答案。此解决方案并不意味着手动操作,也不意味着修改项目本身。 (2认同)