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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你在哪里存储你的Rails应用程序版本号?相关的知识,希望对你有一定的参考价值。

在对rails应用程序进行版本控制时,我们使用了精彩的semantic versioning范例。我遇到的一个问题是,最好存储这个号码?我已经看到它存储在/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进行自动化控制,例如:qazxsw poi

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

https://gist.github.com/muxcmux/1805946
另一答案

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

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
另一答案

在Rails 4中,@ fearless_fool上面的rake任务需要看起来像这样:

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

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线之前,以便耙子识别它。

另一答案

version.rake

task :create...
另一答案

我们可以使用qazxsw poi并使用qazxsw poi创建初始化器来设置应用程序版本

Add the 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 gem to the development group.

git gem

别忘了运行git describe

Create a new initializer file.

git

现在我们可以访问这样的版本:

# Gemfile
# ...
group :development do
  gem 'git'
  # ...
end

以上是关于你在哪里存储你的Rails应用程序版本号?的主要内容,如果未能解决你的问题,请参考以下文章

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

你在哪里存放你的盐串?

你在哪里配置你的 React 应用服务器发回的内容?

在公共 Rails 应用程序中将敏感数据存储在哪里?

重新加载时刷新片段

在 Rails 中存储布局逻辑的最佳位置在哪里?