Ответ 1
У Rails есть встроенная функция rake:
rake tmp:clear
Я применил кеш к моему приложению geelu rails, и он работает хорошо. Но каждый раз, когда я развертываю герою, я также хочу очистить кеш автоматически.
поэтому я нашел googled, и я нашел это.
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
но когда я сгребал этот script, он просто показывает командную строку консоли heroku, но команда Rails.cache.clear не печатает. (Я думаю, это потому, что консоль heroku является интерактивной)
и
system "heroku console Rails.cache.clear"
не работает для кедровых приложений.
Как я могу решить эту проблему?
Спасибо.
У Rails есть встроенная функция rake:
rake tmp:clear
Следующее должно работать над кедром:
heroku run console
.. затем подождите 5 секунд, чтобы загрузить консоль heroku
Rails.cache.clear
Затем вы должны увидеть, что кеш очищен, и вы можете выйти из консоли. Помните, что вам придется обновлять несколько раз, потому что ваш локальный компьютер часто кэширует активы и т.д. В вашем браузере до тех пор, пока он не сделает новый запрос.
Если это когда-то активы, которые вы кэшируете, вам не нужно проходить проверку вручную каждый раз, когда вы нажимаете, вам просто нужно настроить конвейер активов и убедиться, что все ваши js/css (less/sass)/статические изображения скомпилируются с хэшами в конце их имен файлов.
Вы должны иметь возможность создать задачу очистки тайника, которая выглядит примерно так:
namespace :cache do
desc "Clears Rails cache"
task :clear => :environment do
Rails.cache.clear
end
end
и вызывать его непосредственно в одной команде, которую вы можете использовать в своем расцепите post, например:
heroku run rake cache:clear
Ruby on Rails имеет магическую переменную ENV под названием RAILS_CACHE_ID. Я устанавливаю его в идентификатор git commit при каждом развертывании: heroku config:set RAILS_CACHE_ID=$CIRCLE_SHA1
Если вы хотите просто запустить задачу rake после развертывания, я бы рекомендовал проверить:
https://github.com/gunpowderlabs/buildpack-ruby-rake-deploy-tasks
Мы используем его в производстве более 6 месяцев, и он прочный.
Сначала добавьте buildpack ПОСЛЕ того, что у вас уже установлен набор Ruby buildpack. Это должно произойти после первого развертывания на сервере.
heroku buildpacks:add https://github.com/gunpowderlabs/buildpack-ruby-rake-deploy-tasks
Во-вторых, установите переменную среды, называемую DEPLOY_TASKS
, с именами задач rake, которые вы хотите запустить, разделенными пробелами.
heroku config:set DEPLOY_TASKS='cache:clear
heroku run rake tmp: cache: clear
В настоящее время Heroku не поддерживает конвейер действий после развертывания. Вам понадобится нечто вроде Codeship или TravisCI, чтобы создать рецепт шагов, которые происходят во время развертывания.
Раскрытие информации: Я клиент Кодекса.