【问题标题】:Best way to version a rails app? [closed]版本化 Rails 应用程序的最佳方式? [关闭]
【发布时间】:2010-11-06 02:01:57
【问题描述】:

对 Rails 应用程序进行版本控制的最佳方式是什么?我们希望开始进入更结构化的测试周期,并且每个构建都有一个固定的版本是其中的一部分。我们使用颠覆,但我想避免使用版本号。有没有一种简单的方法可以自动执行此操作?或者我应该只在应用程序助手中定义一个 app_version 方法?

(我们正在使用 subversion 进行源代码控制)

【问题讨论】:

  • 版本号和颠覆之间有什么联系吗?例如,您是否为每个版本创建标签或分支?如果是这样,您可以将我的解决方案与 $URL$ 关键字结合使用,根据您的方案,该关键字将扩展到mysubversionserver/tags/v3.0。然后,您可以轻松解析“v3.0”,例如version.split('mysubversionserver/tags/')[1]

标签: ruby-on-rails version-control versioning


【解决方案1】:

如果您使用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

【讨论】:

  • 在 environment.rb 中定义它在 Rails 2.3.14 中不起作用。我建议在您的 applications_helper.rb 中添加一个助手。另外,我更喜欢git describe --always --tags 的输出。然后你得到版本号。但你的回答让我到了那里。 :)
【解决方案2】:

您可以使用subversion keywords:

本质上,你可以有一个辅助方法...

def app_version
    "$Id$"
end

$Id$ 是一个 svn 将扩展的关键字(上面的链接有其他你可以使用的)。现在,我们在该文件上设置关键字属性,让 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,只需在您的根目录。

【讨论】:

  • 赞成。我来这里就是为了说这个。
  • $1 if "$Revision$".match(/Revision: (\d+) /) ... 如果将“Revision”添加到 svn:keywords,那么每个 SVN 都会更新修订版(不仅仅是当前文件更新时),它只会解析出修订版。
【解决方案3】:

您可以通过标记您的 git / svn 分支来进行版本控制……或者,最好的方法是在环境文件中添加一个常量,就像 Rails 所做的那样:

MY_APP_VER = 0.1

为什么要使用应用程序助手?如果您需要在屏幕上显示它,您总是可以从您的应用程序助手中获取该变量。但是,在辅助方法中包含属于整个应用程序配置的逻辑似乎很愚蠢。

【讨论】:

    【解决方案4】:

    我认为这应该是您的源代码控制系统的责任。我会为每个版本使用一个标签,然后您可以创建一个辅助方法,将标签写入您的应用程序(例如,在页脚中):

    def put_version
      "<p id='version'>#{$$TAG_NAME}</p>"
    end
    

    不记得插入标签名称的语法。

    【讨论】:

      【解决方案5】:

      app-version 插件 (http://github.com/toland/app_version/tree/master) 允许您指定应用程序版本的各种组件。然后,您可以将 subversion 修订版作为构建的一个组件包含在内,而不会将其作为主要部分。

      作为构建/测试工作流程的一部分,您还可以增加版本的另一个组件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-02
        • 1970-01-01
        • 2019-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多