ruby-on-rails - Rails rake 任务显示版本返回错误 Errno::ENOENT: No such file or directory @ rb_sysopen - VERSION
问题描述
所以像许多人一样,我正在利用“隔离”来尝试学习一些新技能,特别是 rake 任务。
我正在尝试构建一个 rake 任务来对我的 rails 应用程序进行版本控制。我发现了一个 stackoverflow 问题,其答案引起了我的注意,因此我尝试使用它。但是,当我尝试运行任务时,它给了我这个错误。
错误:
╰─ rake version:minor ─╯
rake aborted!
VERSION file not found or unreadable.
/Users/taurengroup/Desktop/Roadze TMS/roadze-web/lib/tasks/version.rake:21:in `rescue in read_version'
/Users/taurengroup/Desktop/Roadze TMS/roadze-web/lib/tasks/version.rake:17:in `read_version'
/Users/taurengroup/Desktop/Roadze TMS/roadze-web/lib/tasks/version.rake:52:in `<main>'
/Users/taurengroup/Desktop/Roadze TMS/roadze-web/Rakefile:6:in `<top (required)>'
Caused by:
Errno::ENOENT: No such file or directory @ rb_sysopen - VERSION
/Users/taurengroup/Desktop/Roadze TMS/roadze-web/lib/tasks/version.rake:19:in `read'
/Users/taurengroup/Desktop/Roadze TMS/roadze-web/lib/tasks/version.rake:19:in `read_version'
/Users/taurengroup/Desktop/Roadze TMS/roadze-web/lib/tasks/version.rake:52:in `<main>'
/Users/taurengroup/Desktop/Roadze TMS/roadze-web/Rakefile:6:in `<top (required)>'
我知道这告诉我我有一个文件路径错误,但我不能 100% 确定如何解决这个问题,而且我发现的大多数答案对我来说似乎有点混乱。
我要写入的文件路径是:
app/config/initializers/version.rb
从那里我希望能够在我的应用程序的某个地方填充它。
config/initializers/version.rb
目前看起来像这样:
module RoadzeWeb
class Application
VERSION
end
end
我的 version.rake 文件如下所示:
def valid?(version)
pattern = /^\d+\.\d+\.\d+(\-(dev|beta|rc\d+))?$/
raise "Tried to set invalid version: #{version}" 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
File.read 'VERSION'
rescue StandardError
raise 'VERSION file not found or unreadable.'
end
def write_version(version)
valid? version
begin
File.open 'VERSION', 'w' do |file|
file.write correct_version(version)
end
rescue StandardError
raise 'VERSION file not found or unwritable.'
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
new_version = if rc
[version, "rc#{rc[1].to_i + 1}"].join '-'
else
[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
这里的任何帮助将不胜感激!
解决方案
推荐阅读
- here-api - 在平台之间共享位置的正确方式
- javascript - 对象初始化 - 为什么用“:”而不是“=”初始化对象属性
- gatsby - 从 netlify cms 采购
- java - Swagger ui 显示重复的模型变量
- python - 在python中获取散点图不同区域中绘制的点的数据
- mysql - 错误: hasMany 调用的东西不是 Sequelize.Model 的子类
- sql - 如何根据其所属的日期范围插入带有 log_date 的记录
- ssl - NIFI 1.8 站点到站点 SSLHandshakeException 发送数据时
- python - 提交按钮的 Python Selenium 问题,无法始终如一地工作
- drupal - 如何覆盖 Drupal contrib 模块的方法?