你在哪里存储你的Rails应用程序的版本号?

在对rails应用程序进行版本控制时,我们使用了精彩的语义版本控制范例。 我有一个问题是最好存储这个数字? 我已经看到它存储在/libenvironment.rb等中。

只是想知道人们对最佳实践的看法?

我真的不认为这有任何约定。 我想这就是你看起来很自然的一切。

可以放置版本号的某些地方是:

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

通过增加:

 VERSION = '1.0.0' 

无论您选择哪个选项(从上面) – VERSION常量将在应用程序的初始化时设置。

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

lib文件夹确实听起来有点奇怪,因为这个文件夹用于存储可重用的模块。

我的策略是让你的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在应用程序的任何位置访问该版本

我的偏好是创建一个生成的rake任务

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

FWIW,我的佣金任务:

 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 

使用rake任务通过rake进行自动化控制,例如: https ://gist.github.com/muxcmux/1805946

然后在config / initializers / version.rb中:模块SiteInfo类应用程序

 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 

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

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

在Rails 4中,@ fearless_fool上面的rake任务需要如下所示:

 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... 之前 task :create... line以便rake识别它。

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 <