我想通过capistrano从本地机器进入生产服务器上的rails控制台。我找到了一些要点,例如https://gist.github.com/813291和当我通过
cap production console
我得到了以下结果
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.
就这样..。现在我可以输入一些文本,但是什么也没有发生...
有没有人知道如何解决我的问题?
发布于 2013-08-12 00:29:30
我已经为这种事情添加了我自己的任务:
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
现在我说cap rails:console
并获得一个控制台。
发布于 2014-06-16 17:44:24
对于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
要打开servers列表中的第一个服务器:
cap [staging] rails:console
要打开servers列表中的第二个服务器,请执行以下操作:
cap [staging] rails:console 1
参考:Opening a Rails console with Capistrano 3
需要exec来替换当前进程,否则您将无法与rails控制台进行交互。
发布于 2012-09-21 18:21:10
我也曾尝试过这种方法,但后来我选择了避免构建自己的交互式SSH shell客户端,转而使用this snippet,我发现它只是使用了很好的旧SSH。如果您正在进行一些奇怪的SSH网关代理,那么这可能并不适合,但是对于登录到机器并执行某些操作,它就像一个护身符一样工作。
https://stackoverflow.com/questions/9569070
复制相似问题