There seem to a be lot of different ways posted online to get a Rake task to run during a Rails deployment using Capistrano 3.
This is what worked for me, and I think it's cleaner than a lot of the solutions i saw posted on SO or similar.
Let's say you have a Rake task that locally you can run with
rake system:update_rules. Then a you would want to add the following to your deploy.rb:
namespace :system do desc 'Update the system rules ' task :update_rules do on roles(:all) do within release_path do with rails_env: fetch(:rails_env) do execute :rake, 'system:update_rules' end end end end end
Then at the top of your deploy.rb put:
after 'deploy:published', 'system:update_rules'
This will run after the deployment has finished everything else which ensures that and changes you've made to your application will be reflected when Capistrano executes the task.