我尝试使用本地计算机上的 Capistrano 将 Ruby on Rails 应用程序从 bitbucket 上的存储库自动部署到 AWS EC2 实例。我尝试了 ssh、密码、无密码、转发 ssh key 、使用唯一的 ssh key 而不进行转发。每次我面对这个 ssh 跟踪set :ssh_options, {
verbose: :debug
} :debug
D, [2016-01-15T21:08:45.830590 #8129] DEBUG -- socket[2aefc98b29bc]: queueing packet nr 52 type 97 len 28 I, [2016-01-15T21:08:45.830677 #8129] INFO -- net.ssh.connection.session[2aefc9c83b04]: ec2-23-289-88-231.eu-west-1.compute.amazonaws.com delete channel 2 which closed locally and remotely INFO [b3dd32b6] Finished in 0.255 seconds with exit status 0 (successful). cap aborted! Errno::ENETUNREACH: Network is unreachable - connect(2) /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/2.0.0/socket.rb:65:in
connect' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/2.0.0/socket.rb:65:inconnect_internal' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/2.0.0/socket.rb:140:in
connect' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/2.0.0/socket.rb:343:inblock in tcp' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/2.0.0/socket.rb:232:in
each' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/2.0.0/socket.rb:232:inforeach' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/2.0.0/socket.rb:333:in
tcp' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/net-ssh-3.0.2/lib/net/ssh/transport/session.rb:70:ininitialize' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/net-ssh-3.0.2/lib/net/ssh.rb:225:in
new' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/net-ssh-3.0.2/lib/net/ssh.rb:225:instart' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/connection_pool.rb:95:in
call' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/connection_pool.rb:95:increate_new_entry' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/connection_pool.rb:38:in
checkout' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/netssh.rb:134:inwith_ssh' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/netssh.rb:87:in
execute_command' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/abstract.rb:121:inblock in create_command_and_execute' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/abstract.rb:121:in
tap' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/abstract.rb:121:increate_command_and_execute' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/abstract.rb:53:in
execute' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/capistrano-3.2.1/lib/capistrano/tasks/git.rake:17:inblock (3 levels) in <top (required)>' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/abstract.rb:15:in
instance_exec' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/backends/abstract.rb:15:inrun' /home/al/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/sshkit-1.8.1/lib/sshkit/runners/parallel.rb:13:in
block (2 levels) in execute' Tasks: TOP => git:check => git:wrapper The deploy has failed with an error: # ** Invoke deploy:failed (first_time) ** Execute deploy:failed al@al-machine:/media/al/E02EF2032EF1D290/projects/project$ cap aborted! ` ```
请建议尝试什么
这是 deploy.rb
`
lock '3.2.1'
set :application, 'myapp'
set :repo_url, 'git@bitbucket.org:user/application.git'
set :branch, 'staging'
set :ssh_options, {
verbose: :debug
}
set :deploy_to, 'myfolder'
set :scm, :git
set :pty, true
set :keep_releases, 5
set :use_sudo, true
set :rails_env, 'develop'
set :deploy_via, :copy
set :stages, ["staging", "production"]
set :default_stage, 'staging'
namespace :deploy do
desc 'Restart application'
task :restart do
on roles(:app), in: :sequence, wait: 5 do
# Your restart mechanism here, for example:
# execute :touch, release_path.join('tmp/restart.txt')
end
end
#after :publishing, :restart
after :restart, :clear_cache do
on roles(:web), in: :groups, limit: 3, wait: 10 do
# Here we can do anything such as:
# within release_path do
# execute :rake, 'cache:clear'
# end
end
end
after :finishing, 'deploy:cleanup'
end
`
这是 staging.rb
`
role :app, %w{deploy@example.com}
role :web, %w{deploy@example.com}
role :db, %w{deploy@example.com}
set :deploy_to, "/myfolder"
server 'ec2-my-ip.eu-west-1.compute.amazonaws.com',
user: 'ec2-user',
port: '22',
roles: %w{web app db},
:primary => true,
ssh_options: {
user: 'ec2-user', # overrides user setting above
keys: %w(/home/local_machine_user/.ssh/aws_ssh_key_pair.pem),
forward_agent: false,
auth_methods: %w(publickey password),
password: 'please use keys'
}
`
最佳答案
这是网络问题:
Errno::ENETUNREACH: Network is unreachable - connect(2)
检查您的安全组并确保您允许实例连接到端口 22 上的外部源。(您也可以使用“ssh -Tv git@bitbucket.org”从该实例测试它。)
关于ruby-on-rails - 无法使用 capistrano 从 bitbucket 部署到 aws,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34818400/