Created
July 30, 2011 13:16
-
-
Save benedikt/1115513 to your computer and use it in GitHub Desktop.
Capistrano task to open a rails console on a remote server. Require this file in your deploy.rb and run "cap rails:console"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# encoding: UTF-8 | |
Capistrano::Configuration.instance(:must_exist).load do | |
namespace :rails do | |
desc "Open the rails console on one of the remote servers" | |
task :console, :roles => :app do | |
hostname = find_servers_for_task(current_task).first | |
exec "ssh -l #{user} #{hostname} -t 'source ~/.profile && #{current_path}/script/rails c #{rails_env}'" | |
end | |
end | |
end |
Since Capistrano 3 is now out, someone else might want the updated version of this code. You can find it here.
For capistrano 2 you can also use https://github.com/subsis/capistrano-cook - it has a lot of nice recipes included
Had to do this for my Rails 4 app on RVM to find the ruby binary:
ssh myserver -t 'source "$HOME/.rvm/scripts/rvm"; cd ~/apps/myapp.com/current; RAILS_ENV=production bin/rails console'
Had to change it a bit (rails 3.2 + rvm)
namespace :rails do
desc "Open the rails console on one of the remote servers"
task :console, :roles => :app do
hostname = find_servers_for_task(current_task).first
exec "ssh -l #{user} #{hostname} -t 'source \"$HOME/.rvm/scripts/rvm\" && cd #{current_path}; bundle exec rails console #{rails_env}'"
end
desc "Open the rails dbconsole on one of the remote servers"
task :dbconsole, :roles => :app do
hostname = find_servers_for_task(current_task).first
exec "ssh -l #{user} #{hostname} -t 'source \"$HOME/.rvm/scripts/rvm\" && cd #{current_path}; bundle exec rails dbconsole #{rails_env}'"
end
# Short aliases
task :c, :roles => :app do
console
end
task :dbc, :roles => :app do
dbconsole
end
end
Similar to @colszowka, I have to switch to the app user after connecting via SSH
Capistrano::Configuration.instance(:must_exist).load do
namespace :rails do
desc "Open the rails console on one of the remote servers"
task :console, :roles => :app do
server ||= find_servers_for_task(current_task).first
exec %Q[ssh #{server.host} -t 'sudo -u #{user} -- sh -c "source ~/.profile > /dev/null; cd #{release_path}; bin/rails console"']
end
end
end
The idea is to run the command as a different user without typing in a password when policy prohibits sudo su <user> -c
Adapted for Capistrano 3
namespace :rails do
desc "Open the rails console on one of the remote servers"
task :console do |current_task|
on roles(:app) do |server|
exec %Q[ssh -l #{server.user} #{server.hostname} -p #{server.port || 22} -t 'source ~/.bashrc > /dev/null; cd #{release_path}; bin/rails console']
end
end
end
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Awesome, thank you! I modified it very slightly to accomodate our non-standard SSH port.