2012-01-31 187 views

回答

21

我真的不觉得这有什么约定。我猜这全是关于你自然的事情。

有些地方的版本号可以被放置在:通过添加

  • config/environment.rb
  • config/application.rb
  • config/initializers/version.rb

VERSION = '1.0.0' 

无论您选择哪种选项(从上方) - VERSION常数将在应用程序初始化时设置。

对于我的博客,我只更新了我的布局的页脚 - 因为版本号在其他地方没有使用。

lib -folder确实听起来有点奇怪,因为这个文件夹是为了存储可重复使用的模块。

+4

它不应该是:VERSION = '1.0.0' – stebooks 2012-09-08 04:39:06

12

我的选择是创建生成

# config/initializers/version.rb 
VERSION = ["1", "0", "f3d9da7"] 

FWIW rake任务,我的耙子任务:

task :create_version do 
    desc "create VERSION. Use MAJOR_VERSION, MINOR_VERSION, BUILD_VERSION to override defaults" 

    version_file = "#{Rails.root}/config/initializers/version.rb" 
    major = ENV["MAJOR_VERSION"] || 1 
    minor = ENV["MINOR_VERSION"] || 0 
    build = ENV["BUILD_VERSION"] || `git describe --always --tags` 
    version_string = "VERSION = #{[major.to_s, minor.to_s, build.strip]}\n" 
    File.open(version_file, "w") {|f| f.print(version_string)} 
    $stderr.print(version_string) 
end 
37

我的策略就是让你的VCS标记为你做它(这里显示的git )。

添加到您的application.rb

# Only attempt update on local machine 
if Rails.env.development? 
    # Update version file from latest git tag 
    File.open('config/version', 'w') do |file| 
    file.write `git describe --tags --always` # or equivalent 
    end 
end 

config.version = File.read('config/version') 

然后,您可以随时随地与Rails.configuration.version

+0

我很喜欢这个主意! – 2013-04-05 12:44:23

+0

看起来链接已损坏。 – lucke84 2014-03-20 11:48:34

+1

啊。赶上@ lucke84,更改域名!固定 – dooleyo 2014-03-22 22:30:32

6

使用耙子任务通过耙访问的版本在您的应用程序进行自动化控制,为exampe:https://gist.github.com/muxcmux/1805946

然后在config/initializers/version.rb中: module SiteInfo class Application

def self.version 
    "v#{self.read_version}" 
end 

def self.read_version 
    begin 
    File.read 'VERSION' 
    rescue 
    raise "VERSION file not found or unreadable." 
    end 
end 
+0

非常好用的耙子任务。这个答案在以上所有方面都是最好的:) – kovpack 2014-06-17 22:41:16

+0

我想我在这里亲自做的唯一改变是记忆它 – genexp 2014-09-22 12:51:14

3

我个人更喜欢给应用程序类添加一个常量。

# file: config/initializers/version.rb 
class SomeApp::Application 
    Version = '1.0.0' 
end 
2

在Rails 4,@ fearless_fool的耙子任务之上需要看起来像这样:

desc "create VERSION. Use MAJOR_VERSION, MINOR_VERSION, BUILD_VERSION to override defaults" 
task :create_version do 
    version_file = "#{Rails.root}/config/initializers/version.rb" 
    major = ENV["MAJOR_VERSION"] || 1 
    minor = ENV["MINOR_VERSION"] || 0 
    build = ENV["BUILD_VERSION"] || `git describe --always --tags` 
    version_string = "VERSION = #{[major.to_s, minor.to_s, build.strip]}\n" 
    File.open(version_file, "w") {|f| f.print(version_string)} 
    $stderr.print(version_string) 
end 

desc行必须出现,且必须来task :create...线,以便耙识别它。

0

version.rake

def valid? version 
    pattern = /^\d+\.\d+\.\d+(\-(dev|beta|rc\d+))?$/ 
    raise "Tried to set invalid version: #{version}".red unless version =~ pattern 
end 

def correct_version version 
    ver, flag = version.split '-' 
    v = ver.split '.' 
    (0..2).each do |n| 
    v[n] = v[n].to_i 
    end 
    [v.join('.'), flag].compact.join '-' 
end 

def read_version 
    begin 
    File.read 'VERSION' 
    rescue 
    raise "VERSION file not found or unreadable.".red 
    end 
end 

def write_version version 
    valid? version 
    begin 
    File.open 'VERSION', 'w' do |file| 
     file.write correct_version(version) 
    end 
    rescue 
    raise "VERSION file not found or unwritable.".red 
    end 
end 

def reset current, which 
    version, flag = current.split '-' 
    v = version.split '.' 
    which.each do |part| 
    v[part] = 0 
    end 
    [v.join('.'), flag].compact.join '-' 
end 

def increment current, which 
    version, flag = current.split '-' 
    v = version.split '.' 
    v[which] = v[which].to_i + 1 
    [v.join('.'), flag].compact.join '-' 
end 

desc "Prints the current application version" 
version = read_version 
task :version do 
    puts <<HELP 
Available commands are: 
----------------------- 
rake version:write[version] # set custom version in the x.x.x-? format 
rake version:patch   # increment the patch x.x.x+1 (keeps any flags on) 
rake version:minor   # increment minor and reset patch x.x+1.0 (keeps any flags on) 
rake version:major   # increment major and reset others x+1.0.0 (keeps any flags on) 
rake version:dev    # set the dev flag on x.x.x-dev 
rake version:beta    # set the beta flag on x.x.x-beta 
rake version:rc    # set or increment the rc flag x.x.x-rcX 
rake version:release   # removes any flags from the current version 

HELP 
    puts "Current version is: #{version.green}" 
end 

namespace :version do 

    desc "Write version explicitly by specifying version number as a parameter" 
    task :write, [:version] do |task, args| 
    write_version args[:version].strip 
    puts "Version explicitly written: #{read_version.green}" 
    end 

    desc "Increments the patch version" 
    task :patch do 
    new_version = increment read_version, 2 
    write_version new_version 
    puts "Application patched: #{new_version.green}" 
    end 

    desc "Increments the minor version and resets the patch" 
    task :minor do 
    incremented = increment read_version, 1 
    new_version = reset incremented, [2] 
    write_version new_version 
    puts "New version released: #{new_version.green}" 
    end 

    desc "Increments the major version and resets both minor and patch" 
    task :major do 
    incremented = increment read_version, 0 
    new_version = reset incremented, [1, 2] 
    write_version new_version 
    puts "Major application version change: #{new_version.green}. Congratulations!" 
    end 

    desc "Sets the development flag on" 
    task :dev do 
    version, flag = read_version.split '-' 
    new_version = [version, 'dev'].join '-' 
    write_version new_version 
    puts "Version in development: #{new_version.green}" 
    end 

    desc "Sets the beta flag on" 
    task :beta do 
    version, flag = read_version.split '-' 
    new_version = [version, 'beta'].join '-' 
    write_version new_version 
    puts "Version in beta: #{new_version.green}" 
    end 

    desc "Sets or increments the rc flag" 
    task :rc do 
    version, flag = read_version.split '-' 
    rc = /^rc(\d+)$/.match flag 
    if rc 
     new_version = [version, "rc#{rc[1].to_i+1}"].join '-' 
    else 
     new_version = [version, 'rc1'].join '-' 
    end 
    write_version new_version 
    puts "New version release candidate: #{new_version.green}" 
    end 

    desc "Removes any version flags" 
    task :release do 
    version, flag = read_version.split '-' 
    write_version version 
    puts "Released stable version: #{version.green}" 
    end 

end 
相关问题