【问题标题】:Embed Git Commit Log in Rails App?在 Rails 应用程序中嵌入 Git 提交日志?
【发布时间】:2011-01-05 02:05:25
【问题描述】:

所以,我现在正在开发一个 Rails 应用程序中的“开发博客”。我正在使用 Git 进行版本控制和部署(尽管现在我是唯一一个从事此工作的人)。

现在,当我在 Git 中进行更改时,我会在日志中记录我所做的事情。我希望 Git 提交日志自动发布到开发博客——或者以其他方式供其他人在部署的站点中阅读。

是否有一种自动化的方法可以将 Git 提交日志拉入 Rails 应用程序的视图中?

【问题讨论】:

  • 只是简单地感谢到目前为止的回答者,这些建议非常有帮助,我很感激他们每个人都提供了一种独特但可行的方法!
  • 还在做一些测试,每个选项都很有趣。当我弄清楚哪种方式最适合我时,我会选择一个答案,但如果其他人对如何做到这一点有其他想法,我仍然很感兴趣 :)

标签: ruby-on-rails git version-control logging ruby-on-rails-3


【解决方案1】:

一些 Git 主机将允许您提供提交后挂钩,这可以使您能够进行 HTTP 调用以将相关的日志语句发送到您的应用程序。

如果您是自托管,请查看githooks

如果你使用的是 Github,你可以使用他们的 post-commit 帖子(更多细节在这里:http://help.github.com/post-receive-hooks/

【讨论】:

  • 其实Github会简单的在“Commits”下为你显示提交日志。
  • 好的,所以我以前从未听说过 git hooks,但这很有帮助。我是自托管的,所以......如果我放置一个名为 post-commit 的可执行文件,那么理论上可以将提交发布到站点。您能否指出有关如何编写 git 钩子的任何资源——最好是在 Ruby 中?谢谢!
  • 没用过,但可能有用:github.com/schacon/ruby-git 这个链接也有一些很好的信息:book.git-scm.com/5_git_hooks.html
  • 我最终选择了这个答案,因为它是最容易实现的,也是我现在使用的。感谢所有回答问题的人!
【解决方案2】:

您可能想查看grit,这是一个 ruby​​ 库,可以访问 git repo 中的内容。

我在我的个人博客中使用了砂砾。我在文本文件中编写文章并将它们提交到 git repo,然后将 git repo 推送到我的服务器,在那里我的 rails 应用程序使用 grit 从 git repo 读取文件作为博客文章。

例如,以下是获取最后一条提交消息的难易程度:

require 'grit'
include Grit
repo = Repo.new('<path to your .git dir>')
puts repo.commits('master',1)[0].message # latest commit message
puts repo.commits('master',1)[0].date # last commit date

【讨论】:

  • 很好的提示,这可能非常有用!我去看看。
  • 所以...'你的 git 目录的路径'...我正在 Heroku 上部署,我的 git 目录是本地的。我不认为 repo 存在于 Heroku 服务器上,至少不能以任何我能接触到的方式存在(他们把它变成了他们所谓的“slug”)。但是,我确实有另一台私人服务器,我可以在上面存储回购的副本。这会成功地从 URL 而不是路径加载存储库吗?
  • 嗯,我不确定 是否可以是 url...我猜除非 .git 目录是本地的轨道应用程序。例如,就我而言,它类似于:repo=Repo.new('/home/dparoulek/rails-app/.git')
  • 是的,经过测试你是对的,repo 需要是本地的。这在我的本地设置上效果很好,并且可以很好地部署在 heroku 以外的东西上:)
【解决方案3】:

我添加了一个 Capistrano 任务来做类似的事情:

部署.rb

  namespace :deploy do
    desc <<-DESC
      Updates info.html with build and deploy info
    DESC
    task :timestamp do
      run "cd #{current_path}; printf '<pre>\\nDeployed on: %s\\n\\n%s\\n</pre>' \"`date`\" \"`git log -n 1`\" > public/info.html"
    end
  end
  after "deploy", "deploy:timestamp"

我只显示最后一次提交,但您可以更改 git log 命令以显示您想要的任何内容。

【讨论】:

  • 好主意!那么,同样的,我可以把这变成一个简单的任务吗?我正在使用 Heroku 进行部署,因此我的工作流程中没有 capistrano。
  • 是的,你应该能够在 rake 任务中做同样的事情,但看起来 Heroku 不会让你写出这样的文件。最好让 rake 任务将 git 信息放入数据库表中,并让信息页面成为从数据库中提取的 Rails 视图。
猜你喜欢
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
相关资源
最近更新 更多