你在哪里存储你的Rails应用程序版本号?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你在哪里存储你的Rails应用程序版本号?相关的知识,希望对你有一定的参考价值。
在对rails应用程序进行版本控制时,我们使用了精彩的semantic versioning范例。我遇到的一个问题是,最好存储这个号码?我已经看到它存储在/lib
,environment.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应用程序版本号?的主要内容,如果未能解决你的问题,请参考以下文章