2014-02-08 38 views
1

在Heroku中部署Rails應用程序後,是否可以使用鉤子或事件來觸發某些事件?在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解釋瞭如何實現post-deploy鉤子,但也提醒我,當dyno重新啓動時,我創建的任何tmp目錄都會被炸掉...

那麼解決方案是什麼?以下是我想出了:

配置/初始化/的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來弄清楚如何區分預編譯初始化和正常初始化,但似乎沒有辦法,所以這就是我們所要做的。

如果任何人都可以改進就會喜歡聽到它。

相關問題