From eefaf1b7c32cecf2a873fea334adfd1db1344f20 Mon Sep 17 00:00:00 2001 From: Ben Dilley Date: Fri, 19 Sep 2014 18:39:05 +0100 Subject: [PATCH 1/3] Use the default_env normally supplied to sshkit I wanted the console to inherit the default environment specified by `set :default_env` This should also use any loaded framework extensions like rbenv/rvm and bundler. --- lib/capistrano/rails/console/tasks/remote.cap | 36 ++++--------------- lib/capistrano/rails/console/version.rb | 2 +- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/lib/capistrano/rails/console/tasks/remote.cap b/lib/capistrano/rails/console/tasks/remote.cap index 2a4ffa8..84aee9e 100644 --- a/lib/capistrano/rails/console/tasks/remote.cap +++ b/lib/capistrano/rails/console/tasks/remote.cap @@ -1,34 +1,12 @@ -def rvm_loaded? - Gem::Specification::find_all_by_name('capistrano-rvm').any? -end - -def rbenv_loaded? - Gem::Specification::find_all_by_name('capistrano-rbenv').any? -end - -def bundler_loaded? - Gem::Specification::find_all_by_name('capistrano-bundler').any? -end - namespace :rails do - desc 'Access a remote rails console' - task console: ['deploy:set_rails_env'] do - app_server = roles(:app).first - - # RVM support - if rvm_loaded? - Rake::Task['rvm:hook'].invoke - set :rvm_map_bins, ((fetch(:rvm_map_bins) || []) + ['rails']) - end - - command = [] - command << "#{fetch(:rvm_path)}/bin/rvm #{fetch(:rvm_ruby_version)} do" if rvm_loaded? - command << "#{ fetch :rbenv_prefix } " if rbenv_loaded? - command << "bundle exec" if bundler_loaded? - command << "rails console #{fetch(:rails_env)}" - - exec %Q(ssh #{app_server.netssh_options[:user]}@#{app_server.hostname} -p #{app_server.port || 22} -t "cd #{current_path} && #{command.join(' ')}") + desc "Interact with a remote rails console" + task :console do + app_server = primary :app + ssh_cmd = "ssh #{app_server.netssh_options[:user]}@#{app_server.hostname} -p #{app_server.port || 22}" + cmd = SSHKit::Command.new(:rails, "console #{fetch :rails_env}") + SSHKit.config.output << cmd + exec %Q(#{ssh_cmd} -t "cd #{current_path} && (#{cmd.environment_string} #{cmd})") end end diff --git a/lib/capistrano/rails/console/version.rb b/lib/capistrano/rails/console/version.rb index 497f762..f702987 100644 --- a/lib/capistrano/rails/console/version.rb +++ b/lib/capistrano/rails/console/version.rb @@ -5,7 +5,7 @@ module Rails # Console module Console # gem version - VERSION = '0.2.0' + VERSION = '0.3.0' end end end From 8cf382d54e8920e21077f590df4f76268068353c Mon Sep 17 00:00:00 2001 From: Ben Dilley Date: Fri, 19 Sep 2014 18:53:07 +0100 Subject: [PATCH 2/3] Replacing unnecessary removal of task dependency --- lib/capistrano/rails/console/tasks/remote.cap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/capistrano/rails/console/tasks/remote.cap b/lib/capistrano/rails/console/tasks/remote.cap index 84aee9e..010d966 100644 --- a/lib/capistrano/rails/console/tasks/remote.cap +++ b/lib/capistrano/rails/console/tasks/remote.cap @@ -1,7 +1,7 @@ namespace :rails do desc "Interact with a remote rails console" - task :console do + task console: ['deploy:set_rails_env'] do app_server = primary :app ssh_cmd = "ssh #{app_server.netssh_options[:user]}@#{app_server.hostname} -p #{app_server.port || 22}" cmd = SSHKit::Command.new(:rails, "console #{fetch :rails_env}") From 197204702381ee0cc2de71763a422813f4e85f4d Mon Sep 17 00:00:00 2001 From: Ben Dilley Date: Fri, 19 Sep 2014 20:49:06 +0100 Subject: [PATCH 3/3] Slightly more idiomatic implementation No functional change, just implementing in a more typical style for a capistrano task. --- lib/capistrano/rails/console/tasks/remote.cap | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/capistrano/rails/console/tasks/remote.cap b/lib/capistrano/rails/console/tasks/remote.cap index 010d966..0876e2f 100644 --- a/lib/capistrano/rails/console/tasks/remote.cap +++ b/lib/capistrano/rails/console/tasks/remote.cap @@ -2,11 +2,12 @@ namespace :rails do desc "Interact with a remote rails console" task console: ['deploy:set_rails_env'] do - app_server = primary :app - ssh_cmd = "ssh #{app_server.netssh_options[:user]}@#{app_server.hostname} -p #{app_server.port || 22}" - cmd = SSHKit::Command.new(:rails, "console #{fetch :rails_env}") - SSHKit.config.output << cmd - exec %Q(#{ssh_cmd} -t "cd #{current_path} && (#{cmd.environment_string} #{cmd})") + on primary :app do |host| + ssh_cmd = "ssh #{host.netssh_options[:user]}@#{host.hostname} -p #{host.port || 22}" + cmd = SSHKit::Command.new(:rails, "console #{fetch :rails_env}") + SSHKit.config.output << cmd + exec %Q(#{ssh_cmd} -t "cd #{current_path} && (#{cmd.environment_string} #{cmd})") + end end end