在将Rails应用程序部署到Heroku后,是否有可用于触发某事的钩子或事件?
具体来说,我们想在tmp /下构建一个特定的目录结构(结构取决于配置值,因此无法检入源代码)。
答案 0 :(得分: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重启后消失。
答案 1 :(得分:1)
原来我的问题的两个部分不兼容 - @eugen解释了如何实现部署后的挂钩,但也提醒我,每当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想弄清楚如何区分预编译初始化和正常初始化,但似乎没有办法,所以这就是我们留下的。
如果有人可以改进,就会喜欢听到它。