2014-02-08 4 views
1

Есть ли крючок или событие, которое может быть использовано для того, чтобы вызвать что-то сразу после того, как приложение Rails развернуто в Heroku?Сделайте что-то после развертывания Heroku

В частности, мы хотим построить определенную структуру каталогов в tmp/(структура зависит от значений конфигурации, поэтому она не может быть проверена в источнике).

ответ

3

Heroku поддерживает несколько после разворачивания крюков - см. https://devcenter.heroku.com/articles/deploy-hooks. Вы можете использовать HTTP-крючок, чтобы вызвать действие в вашем приложении, которое создаст желаемую структуру. В качестве примера того, как использовать этот крюк для развертывания HTTP, см. http://dzello.com/blog/2012/03/11/spin-up-your-heroku-dyno-automatically-after-deploy/

Имейте в виду, что если вы создадите что-либо в каталоге tmp, оно исчезнет после перезапуска dyno.

+0

@ eugen- спасибо за это. Даю вам кредит, потому что вы ответили на первую часть, но также указали, что то, что я пытаюсь достичь, на самом деле не будет работать на крюке развертывания. [Мой ответ] (http://stackoverflow.com/a/21652889/165673) предоставляет решение/взломать вторую часть ... – Yarin

1

Оказалось, что две части моего вопроса несовместимы - @eugen объясняет, как реализовать привязку после развертывания, но также напомнил мне, что любые создаваемые мной tmp-каталоги будут выдуваться при каждом перезагрузке dyno ...

Так в чем же решение? Вот, что я придумал:

конфигурации/Инициализаторы/setup.rb

# Ensure temp file system is set up: 
begin 
    Dir.mkdir("tmp/customdir") unless File.exists?("tmp/customdir") 
rescue StandardError => e 
    # Allow this to fail on initial deploy 
    # (It will raise error: "No such file or directory - tmp/customdir" because the tmp dir won't yet exist) 
end 

Объяснение: Heroku по существу делает инициализацию два прохода во время разворачивает. Первый проход, когда он предварительно компилирует активы, обычно задыхается над вышеуказанным кодом, потому что каталог tmp еще не существует. Если мы разрешим ему провалиться, он будет работать на втором проходе и последующих перезапусках.

Да, это взломать. У меня есть tried before, чтобы выяснить, как отличить инициализацию до компиляции и нормальные инициализации, но, похоже, это не так, так что это то, с чем мы остались.

Если кто-то может улучшить это, он бы хотел его услышать.

Смежные вопросы