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