如何通过capistrano进入生产轨道控制台?

mon*_*cht 20 console capistrano ruby-on-rails

我想通过capistrano从我的本地机器进入生产服务器上的rails控制台.我找到了一些要点,例如https://gist.github.com/813291,当我进入控制台时

cap production console 
Run Code Online (Sandbox Code Playgroud)

我得到以下结果

192-168-0-100:foldername username $ cap console RAILS_ENV=production
  * executing `console'
  * executing "cd /var/www/myapp/current && rails console production"
    servers: ["www.example.de"]
    [www.example.de] executing command
    [www.example.de] rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell '1.9.3' -c 'cd /var/www/myapp/current && rails console production'
/var/www/myapp/releases/20120305102218/app/controllers/users_controller.rb:3: warning: already initialized constant VERIFY_PEER
Loading production environment (Rails 3.2.1)
Switch to inspect mode.
Run Code Online (Sandbox Code Playgroud)

这就是它...现在我可以输入一些文字,但没有任何反应......

有谁知道如何获得该工作或我的问题的另一种解决方案?

Roc*_*one 10

我为这种事情添加了自己的任务:

namespace :rails do
  desc "Remote console"
  task :console, :roles => :app do
    run_interactively "bundle exec rails console #{rails_env}"
  end

  desc "Remote dbconsole"
  task :dbconsole, :roles => :app do
    run_interactively "bundle exec rails dbconsole #{rails_env}"
  end
end

def run_interactively(command)
  server ||= find_servers_for_task(current_task).first
  exec %Q(ssh #{user}@#{myproductionhost} -t '#{command}')
end
Run Code Online (Sandbox Code Playgroud)

我现在说cap rails:console并获得一个控制台.


Pab*_*ero 5

对于Capistrano 3,您可以在以下位置添加以下内容config/deploy:

namespace :rails do
  desc 'Open a rails console `cap [staging] rails:console [server_index default: 0]`'
  task :console do    
    server = roles(:app)[ARGV[2].to_i]

    puts "Opening a console on: #{server.hostname}...."

    cmd = "ssh #{server.user}@#{server.hostname} -t 'cd #{fetch(:deploy_to)}/current && RAILS_ENV=#{fetch(:rails_env)} bundle exec rails console'"

    puts cmd

    exec cmd
  end
end
Run Code Online (Sandbox Code Playgroud)

要在服务器列表中打开第一个服务器:

cap [staging] rails:console 
Run Code Online (Sandbox Code Playgroud)

要在服务器列表中打开第二个服务器:

cap [staging] rails:console 1 
Run Code Online (Sandbox Code Playgroud)

参考:使用Capistrano 3打开Rails控制台

需要exec来替换当前进程,否则您将无法与rails控制台进行交互.


The*_*ous 0

我也曾摆弄过这种方法,但后来避免构建自己的交互式 SSH shell 客户端,而只是使用了这个片段,我发现它只是使用了良好的旧 SSH。如果您正在进行一些奇怪的 SSH 网关代理,这可能不适合,但对于登录到盒子并执行一些操作,它就像一个魅力。