4

Github 开发了 github-services hook 来将提交推送到 bugzilla、campfire、basecamp 等其他服务。

可以使用相同的 github-services 挂钩将我的应用程序数据推送到其他服务吗?如果是,我如何将github-services集成到我的 Rails 应用程序中。

任何帮助?有什么建议吗?

更新我可以将 github-services 挂钩源代码作为 Sinatra 应用程序集成到我的 Rails 应用程序中吗?如何从我的应用程序触发器中调用其他服务(bugzilla、campfire、basecam、twitter)挂钩?

例如,当一个用户在其他用户的墙上发布内容时,应该将消息发送到其他服务,如 bugzilla、campfire、basecamp、twitter ......

4

2 回答 2

7

Post-Receive Url是执行此类通知的最简单的挂钩。每当在存储库上执行a 时,它都会触发POST预先配置的 Url push

你可以从这个Github.help 页面开始测试 web 钩子,以了解发布内容的格式以及服务如何反应。这要感谢一项非常有用的服务:PostBin

此帮助页面提供了一个简单的示例,说明在 Sinatra 服务器上必须实现什么来解析 POSTed JSON:

post '/' do
    push = JSON.parse(params[:payload])
    "I got some JSON: #{push.inspect}"
end

这个要点更进一步,展示了一些非常基本的 JSON 数据提取。

如果你想更进一步,你可以通过GitHub API配置一些额外的钩子来监听更多事件(新问题、新分叉、下载……)。

于 2011-12-24T08:54:32.537 回答
1

我认为您正在寻找一种将应用程序数据发布到许多其他 Web 服务的简单方法。

github-services 旨在获取 git 提交信息并将其推送到接受该提交信息的其他服务......所以如果您的应用程序的数据看起来足够像github 的有效负载,那么与 github-services 一起使用的其他服务将与您的应用程序一起使用.

但我怀疑您的应用程序不像 github 并且您的数据与 git commit 不同。在这种情况下,您可以使用“services/”中的代码作为如何在您的应用程序中实现事件处理程序的示例。这个 Campfire 使用 Tinder gem,例如:https ://github.com/github/github-services/blob/master/services/campfire.rb

然后,您的 WallPostsController#create 可以调用一个方法,以您选择的格式将数据发布到各种服务。如果您要发布到许多服务,您可能希望在异步作业(DelayedJob、resque 等)中进行,因为对许多外部服务的调用将花费相当长的时间。

于 2011-12-24T19:03:47.167 回答