ruby-on-rails – 在Web应用程序中显示最新的提交值?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 在Web应用程序中显示最新的提交值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有几个Rails应用程序,我使用 Git作为版本控制系统.我使用 GitHub或Beanstalk作为存储库主机.

我想要的是理论上很简单.不知何故在Web应用程序的页脚中显示最新的提交ID号(hash?).所以当我查看Web应用程序时,我可以检查它是否正确提交和部署.

我可以想象有两种方法可以解决这个问题.第一个将是Git的一个可能的功能,允许输出提交ID.第二个将是一个后提交Web钩子(Beanstalk和GitHub都允许这一点).

有没有人找到了这样做的方法,或类似的东西?

谢谢,

丹尼

解决方法

首先,一个澄清:post-commit hook不能在commit中添加commit-id到文件中,因为commit id取决于顶层树的提交(代表顶层目录),顶层树的id依赖于其成员的id,而文件的id取决于其内容…而这个内容是包含提交ID.不可能.

但是让我们来看看不同的解决方案:

实时,服务器端脚本

如果您的网络应用程序是从非裸机存储库中实时部署的(希望您知道自己正在做什么wrt.推入非裸机器库,即具有检出/工作树的存储库),那么您的Web应用程序可以使用git rev-parse HEAD(提交SHA-1)或更好的git描述–dirty(–dirty选项将使返回的字符串包含信息,无论您是否在工作区域中进行了更改)或git describe –always HEAD.

git rev-parse HEAD给出了像7611062b4ba6d1ebc4cf3e63c11204a4f5057660这样的东西,而git描述–dirty给出了像v1.7.3.2-95-g7611062这样的东西(这意味着提交缩写为SHA-1的7611062,95提交后提交标记’v1.7.3′. 2′),但这取决于您使用带注释的标签标记版本.

这样做的一个变体是让Web应用程序从位于同一文件系统上的其他位置的存储库中检查HEAD,例如.用git –git-dir = / path / to / .git描述HEAD.

Sidenote:如果你使用Ruby,你可能想要使用grit库.相当于git rev-parse HEAD版本可能是(未测试!):

require 'grit'
include Grit

repo = Repo.new("/var/git/app.git")
head = repo.commits('HEAD',1)

app_version = head.id

从git结帐提供的Live,静态文件

编辑:添加部分2010-10-23 13:33 0000
如果您从非裸机git仓库(不是您的情况)的结帐(worktree)提供文件,则可以使用过滤器gitattribute的“smudge”和“clean”命令在checkout / checkin上执行类似CVS的关键字扩展.

在.gitattributes文件中,您将定义哪个过滤器属性应该执行的文件

*.rb filter=commitid

您可以在git配置文件(例如.git / config)中定义过滤器

[filter "commitid"]
        smudge = sed -e "s/\$Revision: ?\$/\$Revision: $(git rev-parse HEAD)\$/1"
        clean =  sed -e "s/\$Revision: ?[^$]*\$/\$Revision: \$/1"

涂抹过滤器将用例如“$Revision:$”替换. ‘$Revision:v1.7.3.2-95-g7611062’在结帐(这意味着检查的outfiles将包含这个类似CVS的关键字扩展).在git对象数据库(在git仓库中)存储文件内容时,干净的过滤器将删除扩展;否则你会有比较文件等问题.

使用git存档部署

如果您代替部署您的Web应用程序,那么它不会驻留在实时存储库(它的怪异wrt.推入它,并且有可能的安全性缺陷),并且您在某个地方使用git存档(例如,以压缩应用程序上传它到您的托管网站),您可以使用关键字替换.

首先,您需要告诉Git,您要将文件中的关键字替换为git archive.您可以通过为给定文件设置export-subst来实现,例如通过添加到.gitattributes文件

*.rb export-subst

然后添加到包含/生成页脚的文件,例如

$Format:%H$

这将被提交哈希替换(参见漂亮的格式描述,例如git-log联机帮助页).

部署,使用一些部署脚本

如果您使用某种脚本/脚本机制部署您的Web应用程序,则应遵循Jefromi advice的部署脚本嵌入版本信息.

您将不得不要求其他人如何设置Capistrano(假设您使用它来部署)发布:部署替换’@@ VERSION @@’占位符在您的’app.rb’文件中,结果为git describe –ALways HEAD … Git项目Makefile uses sed for that.

猜你在找的Ruby相关文章