Skip to content

Instantly share code, notes, and snippets.

@ej2015
Forked from joost/deploy.rb
Created October 10, 2018 09:12
Show Gist options
  • Save ej2015/78a7ad5ef33e34e6712c1eb084bc34d7 to your computer and use it in GitHub Desktop.
Save ej2015/78a7ad5ef33e34e6712c1eb084bc34d7 to your computer and use it in GitHub Desktop.
Capistrano 3 rails console tasks
# encoding: UTF-8
# Place in config/deploy.rb
# See: https://gist.github.com/joost/9343156
# Adapted to work with rbenv
namespace :rails do
desc "Open the rails console on primary app server"
task :console do
on roles(:app), primary: true do
rails_env = fetch(:stage)
execute_interactively "#{bundle_cmd} #{current_path}/script/rails console #{rails_env}"
end
end
desc "Open the rails dbconsole on primary db server"
task :dbconsole do
on roles(:db), primary: true do
rails_env = fetch(:stage)
execute_interactively "#{bundle_cmd} #{current_path}/script/rails dbconsole #{rails_env}"
end
end
def execute_interactively(command)
user = fetch(:user)
port = fetch(:port) || 22
cmd = "ssh -l #{user} #{host} -p #{port} -t 'cd #{deploy_to}/current && #{command}'"
info "Connecting to #{host}"
exec cmd
end
def bundle_cmd
if fetch(:rbenv_ruby)
# FIXME: Is there a better way to do this? How does "execute :bundle" work?
"RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{File.join(fetch(:rbenv_path), '/bin/rbenv')} exec bundle exec"
else
"ruby "
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment