5

当我尝试 ssh 到服务器时,我可以这样做,因为我的id_rsa.pub密钥已添加到服务器中的授权密钥中。

现在,当我尝试通过 Capistrano 将代码从本地项目文件夹部署到服务器时,服务器会要求输入密码。

如果我能够 ssh 并且无法部署到同一台服务器,我无法理解可能是什么问题。

$上限部署:设置

"no seed data"
triggering start callbacks for `deploy:setup'
* 13:42:18 == Currently executing `multistage:ensure'
*** Defaulting to `development'
* 13:42:18 == Currently executing `development'
* 13:42:18 == Currently executing `deploy:setup'
triggering before callbacks for `deploy:setup'
* 13:42:18 == Currently executing `db:configure_mongoid'
* executing "mkdir -p /home/deploy/apps/development/flyingbird/shared/config"
 servers: ["dev1.noob.com", "176.9.24.217"]
 Password: 

帽脚本:

# gem install capistrano capistrano-ext capistrano_colors
 begin; require 'capistrano_colors'; rescue LoadError; end
 require "bundler/capistrano"

 # RVM bootstrap
 # $:.unshift(File.expand_path('./lib', ENV['rvm_path']))
 require 'rvm/capistrano'
 set :rvm_ruby_string, 'ruby-1.9.2-p290'
 set :rvm_type, :user # or :user

 # Application setup
default_run_options[:pty] = true # allow pseudo-terminals
ssh_options[:forward_agent] = true # forward SSH keys (this will use your SSH key to get the code from git repository)
ssh_options[:port] = 22
 set :ip, "dev1.noob.com" 
set :application, "flyingbird"

 set :repository, "repo-path"
 set :scm, :git
 set :branch, fetch(:branch, "master")

 set :deploy_via, :remote_cache
 set :rails_env, "production"
 set :use_sudo, false
 set :scm_username, "user"
 set :user, "user1"


 set(:database_username) { application }
 set(:production_database) { application + "_production" }
 set(:staging_database) { application + "_staging" }
 set(:development_database) { application + "_development" }


 role :web, ip                        # Your HTTP server, Apache/etc
 role :app, ip                          # This may be the same as your `Web` server
 role :db,  ip, :primary => true # This is where Rails migrations will run


 # Use multi-staging
 require "capistrano/ext/multistage"
 set :stages, ["development", "staging", "production"]
 set :default_stage, rails_env

 before "deploy:setup", "db:configure_mongoid"

 # Uncomment if you use any of these databases
 after "deploy:update_code", "db:symlink_mongoid"
 after "deploy:update_code", "uploads:configure_shared"
 after "uploads:configure_shared", "uploads:symlink"


 after 'deploy:update_code', 'bundler:symlink_bundled_gems'
 after 'deploy:update_code', 'bundler:install'
 after "deploy:update_code", "rvm:trust_rvmrc" 

 # Use this to update crontab if you use 'whenever' gem
 # after "deploy:symlink", "deploy:update_crontab"

 if ARGV.include?("seed_data")
    after "deploy", "db:seed"
 else
     p "no seed data"
 end


   #Custom tasks to handle resque and redis restart
   before "deploy", "deploy:stop_workers"
   after "deploy", "deploy:restart_redis"
   after "deploy", "deploy:start_workers"
   after "deploy", "deploy:cleanup"

   'Create symlink for public uploads'
    namespace :uploads do 
      task :symlink do
        run <<-CMD
          rm -rf #{release_path}/public/uploads &&
          mkdir -p #{release_path}/public &&
          ln -nfs #{shared_path}/public/uploads #{release_path}/public/uploads
         CMD
      end
    task :configure_shared do 
    run "mkdir -p #{shared_path}/public"
    run "mkdir -p #{shared_path}/public/uploads"
  end
 end


     namespace :rvm do
       desc 'Trust rvmrc file'
        task :trust_rvmrc do
        run "rvm rvmrc trust #{current_release}"
       end
     end



        namespace :db do

         desc "Create mongoid.yml in shared path"
          task :configure_mongoid do
            db_config = <<-EOF
             defaults: &defaults
            host: localhost

         production:
           <<: *defaults
            database: #{production_database}
         staging:
            <<: *defaults
            database: #{staging_database}
          EOF

          run "mkdir -p #{shared_path}/config"
          put db_config, "#{shared_path}/config/mongoid.yml"
         end

          desc "Make symlink for mongoid.yml"
            task :symlink_mongoid do
            run "ln -nfs #{shared_path}/config/mongoid.yml #{release_path}/config/mongoid.yml"
           end

            desc "Fill the database with seed data"
             task :seed do
               run "cd #{current_path}; RAILS_ENV=#{default_stage}  bundle exec rake                   db:seed"
              end

            end

            namespace :bundler do
             desc "Symlink bundled gems on each release"
             task :symlink_bundled_gems, :roles => :app do
             run "mkdir -p #{shared_path}/bundled_gems"
             run "ln -nfs #{shared_path}/bundled_gems #{release_path}/vendor/bundle"
           end






            desc "Install bundled gems "
              task :install, :roles => :app do
                run "cd #{release_path} && bundle install --deployment"
              end
            end



             namespace :deploy do
               task :start, :roles => :app do
               run "touch #{current_path}/tmp/restart.txt"
             end

             desc "Restart the app"
               task :restart, :roles => :app do
                 run "touch #{current_path}/tmp/restart.txt"
             end

             desc "Start the workers"
              task :stop_workers do
                run "cd #{current_path}; RAILS_ENV=#{default_stage}  bundle exec rake                                   resque:stop_workers"
             end

             desc "Restart Redis server"
               task :restart_redis do
                 "/etc/init.d/redis-server restart" 
             end

             desc "Start the workers"
               task :start_workers do
                  run "cd #{current_path}; RAILS_ENV=#{default_stage}  bundle exec rake  resque:start_workers"
             end


         end
4

1 回答 1

1

您需要同时指定 SSH 用户和私钥进行身份验证:

IE:

 set :user,    "deploy"
 set :ssh_key, "deploy.pem"

如果您正在使用 capistrano 多级(看起来就是这样),请在该环境的 stages.yml 文件中添加键:

 user:     "deploy"
 ssh_key:  "deploy.pem"
于 2012-07-26T16:01:06.150 回答