2014-02-08 39 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来弄清楚如何区分预编译初始化和正常初始化,但似乎没有办法,所以这就是我们所要做的。

如果任何人都可以改进就会喜欢听到它。

相关问题