在Heroku部署之后做一些事情

时间:2014-02-08 21:47:56

标签: ruby-on-rails heroku

在将Rails应用程序部署到Heroku后,是否有可用于触发某事的钩子或事件?

具体来说,我们想在tmp /下构建一个特定的目录结构(结构取决于配置值,因此无法检入源代码)。

2 个答案:

答案 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想弄清楚如何区分预编译初始化和正常初始化,但似乎没有办法,所以这就是我们留下的。

如果有人可以改进,就会喜欢听到它。