Assuming, you are deploying your Rails app using Capistrano.
1) In your deploy.rb add the following hook,
after "deploy", "installed_version:update"
And add a task(installed_version:update)
namespace :installed_version do
task :update, :roles => :app, :except => { :no_release => true } do
run "cd #{current_path} && RAILS_ENV=#{rails_env} rake update:version"
end
end
task :update, :roles => :app, :except => { :no_release => true } do
run "cd #{current_path} && RAILS_ENV=#{rails_env} rake update:version"
end
end
2) Create a new rake task file in your rails app(lib/tasks/update_build_version.rake)
Add below lines,
namespace "update" do
desc "This will update the installed version no. in DB from the latest tag name"
task :version => :environment do
tag = `git rev-list --tags --max-count=1`
tag_name = `git describe --tags #{tag}`.chomp
puts "Latest Tag No.#{tag_name}"
attributes = {:version_no => tag_name, :build_dt => Time.now}
Version.create(attributes) # assuming you have versions tbl
puts "Build updated with Version No.\"#{tag_name}\""
end
end
desc "This will update the installed version no. in DB from the latest tag name"
task :version => :environment do
tag = `git rev-list --tags --max-count=1`
tag_name = `git describe --tags #{tag}`.chomp
puts "Latest Tag No.#{tag_name}"
attributes = {:version_no => tag_name, :build_dt => Time.now}
Version.create(attributes) # assuming you have versions tbl
puts "Build updated with Version No.\"#{tag_name}\""
end
end
That's all, we are done !!!
Note: Before every deployment you need to tag your code with some version No.(ex: 1.2.1) and then run cap
This post would be really helpful when you want to automate your Build Management process.