Подтвердить что ты не робот

Как я могу очистить кеш-рельсы после развертывания в heroku?

Я применил кеш к моему приложению 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"

не работает для кедровых приложений.

Как я могу решить эту проблему?

Спасибо.

4b9b3361

Ответ 1

У Rails есть встроенная функция rake:

rake tmp:clear

Ответ 2

Следующее должно работать над кедром:

heroku run console

.. затем подождите 5 секунд, чтобы загрузить консоль heroku

Rails.cache.clear

Затем вы должны увидеть, что кеш очищен, и вы можете выйти из консоли. Помните, что вам придется обновлять несколько раз, потому что ваш локальный компьютер часто кэширует активы и т.д. В вашем браузере до тех пор, пока он не сделает новый запрос.

Если это когда-то активы, которые вы кэшируете, вам не нужно проходить проверку вручную каждый раз, когда вы нажимаете, вам просто нужно настроить конвейер активов и убедиться, что все ваши js/css (less/sass)/статические изображения скомпилируются с хэшами в конце их имен файлов.

Ответ 3

Вы должны иметь возможность создать задачу очистки тайника, которая выглядит примерно так:

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

и вызывать его непосредственно в одной команде, которую вы можете использовать в своем расцепите post, например:

heroku run rake cache:clear

Ответ 4

Ruby on Rails имеет магическую переменную ENV под названием RAILS_CACHE_ID. Я устанавливаю его в идентификатор git commit при каждом развертывании: heroku config:set RAILS_CACHE_ID=$CIRCLE_SHA1

Ответ 5

Если вы хотите просто запустить задачу 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

Ответ 7

В настоящее время Heroku не поддерживает конвейер действий после развертывания. Вам понадобится нечто вроде Codeship или TravisCI, чтобы создать рецепт шагов, которые происходят во время развертывания.

Раскрытие информации: Я клиент Кодекса.