对rails应用程序进行版本化的最佳方法是什么?我们希望开始进入更加结构化的测试周期,并且每个构建版本的设置版本都是其中的一部分。我们使用subversion但我想避免使用版本的修订号。有一种简单的方法可以自动执行此操作吗?或者我应该在应用程序助手中定义app_version方法?
(我们正在使用subversion进行源代码管理)
答案 0 :(得分:21)
如果您使用git
,则可以在environment.rb
文件中创建一个静态变量,该变量从git中提取当前标记名称。如果您使用git flow之类的内容,则效果很好。
添加到environment.rb
:
APP_VERSION = `git describe --always` unless defined? APP_VERSION
现在,您可以在视图中<%= APP_VERSION %>
。注:这对Heroku不起作用。
来源:http://blog.danielpietzsch.com/post/1209091430/show-the-version-number-of-your-rails-app-using-git
答案 1 :(得分:4)
您可以使用subversion keywords:
基本上,你可以有一个辅助方法......
def app_version
"$Id$"
end
$Id$
是svn将展开的关键字(上面的链接包含您可以使用的其他链接)。现在,我们在该文件上设置keywords属性,让svn知道它应该替换关键字(让我们假设是application_helper.rb):
svn propset svn:keywords "Id" application_helper.rb
svn ci application_helper.rb
现在,如果您查看application_helper.rb,它将会读取(类似这样,版本,日期,用户名已更改)
def app_version
"$Id: application_helper.rb 282 2009-06-26 10:34:17Z root $"
end
显然,您可以将其分配给变量并将其解析为所需的格式,将其包含在视图模板中等。或者执行相同的操作但不使用application_helper.rb,只需使用名为VERSION
的文件在你的根目录。
答案 2 :(得分:3)
app-version插件(http://github.com/toland/app_version/tree/master)允许您指定应用程序版本的各种组件。然后,您可以将subversion修订版作为构建的一个组件包含在内,而不是它的主要部分。
作为构建/测试工作流程的一部分,您还可以增加该版本的另一个组件。
答案 3 :(得分:2)
你可以通过标记你的git / svn分支来版本......或者,最好的方式,环境文件中的常量,就像Rails一样:
MY_APP_VER = 0.1
为什么要使用应用程序助手?如果需要在屏幕上显示,您可以随时从应用程序助手获取该变量。但是,在辅助方法中使用属于整个应用程序配置的逻辑似乎很愚蠢。
答案 4 :(得分:0)
我认为这应该是您的源控制系统的责任。我会为每个版本使用一个标记,然后您可以创建一个帮助方法,只需将标记写在您的应用程序中(例如,在页脚中):
def put_version
"<p id='version'>#{$$TAG_NAME}</p>"
end
不记得插入标记名称的语法。