1

在一个项目中,我使用 gitolite 和 capistrano。这对另一个开发人员来说很好。问题是它对我不起作用:我实际上无法使用 capistrano 进行部署。

当我运行 cap deploy 命令时,它会询问我服务器的密码(这里,ok)和 gitolite 的密码,它不存在。

C:\wamp\www\miiaou>cap deploy
  * ←[32m2012-12-12 15:12:34 executing `deploy'←[0m
  * ←[32m2012-12-12 15:12:34 executing `deploy:update'←[0m
 ** transaction: start
  * ←[32m2012-12-12 15:12:34 executing `deploy:update_code'←[0m
    updating the cached checkout on all servers
    ←[33mexecuting locally: "git ls-remote gitolite@miiaou.fr:miiaou master"←[0m

    ←[2;37mcommand finished in 1351ms←[0m
  * ←[33mexecuting "if [ -d /home/miiaou/miiaou_prod/shared/cached-copy ]; then
cd /home/miiaou/miiaou_prod/shared/cached-copy && git fetch -q origin && git fet
ch --tags -q origin && git reset -q --hard 117b2bb34817d89a1fbe34f1891ac3c823a23
fce && git clean -q -d -x -f; else git clone -q gitolite@miiaou.fr:miiaou /home/
miiaou/miiaou_prod/shared/cached-copy && cd /home/miiaou/miiaou_prod/shared/cach
ed-copy && git checkout -q -b deploy 117b2bb34817d89a1fbe34f1891ac3c823a23fce; f
i"←[0m
    servers: ["miiaou.fr"]
Password:
    [miiaou.fr] executing command
 ** [miiaou.fr :: out] Error reading response length from authentication socket.

 ** [miiaou.fr :: out] gitolite@miiaou.fr's password:
Password:
 ** [miiaou.fr :: out]
 ** ←[31m[miiaou.fr :: out] Permission denied, please try again.
 ** gitolite@miiaou.fr's password:←[0m
Password:
 ** [miiaou.fr :: out]
 ** ←[31m[miiaou.fr :: out] Permission denied (publickey,password).
 ** fatal: The remote end hung up unexpectedly←[0m
    ←[2;37mcommand finished in 36755ms←[0m
*** [←[34mdeploy:update_code←[0m] ←[34mrolling back←[0m
  * ←[33mexecuting "rm -rf /home/miiaou/miiaou_prod/releases/20121212141318; tru
e"←[0m
    servers: ["miiaou.fr"]
    [miiaou.fr] executing command
    ←[2;37mcommand finished in 133ms←[0m
failed: "if [ -d /home/miiaou/miiaou_prod/shared/cached-copy ]; then cd /home/mi
iaou/miiaou_prod/shared/cached-copy && git fetch -q origin && git fetch --tags -
q origin && git reset -q --hard 117b2bb34817d89a1fbe34f1891ac3c823a23fce && git
clean -q -d -x -f; else git clone -q gitolite@miiaou.fr:miiaou /home/miiaou/miia
ou_prod/shared/cached-copy && cd /home/miiaou/miiaou_prod/shared/cached-copy &&
git checkout -q -b deploy 117b2bb34817d89a1fbe34f1891ac3c823a23fce; fi" on miiao
u.fr

我不明白为什么它需要密码,因为 ssh 密钥有效。

有谁能够帮我?谢谢

编辑:如果有帮助,这里是我的 deploy.rb

require "bundler/capistrano"

# Rails 3.1 : laod capistrano task to precompile assets
# bundle exec rake RAILS_ENV=staging RAILS_GROUPS=assets assets:precompile
load "deploy/assets"

set :stages, %w(production)
set :default_stage, "production"

set :application, "miiaou"
set :repository,  "gitolite@miiaou.fr:#{application}"
set :domain, "miiaou.fr"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "/home/miiaou/#{application}_prod"
set :shared_path, "/home/miiaou/#{application}_prod/shared"

set :scm, "git"
set :branch, "master"
# Agent Forwarding : use local keys for git
ssh_options[:forward_agent] = true
set :deploy_via, :remote_cache


default_run_options[:pty] = true
ssh_options[:paranoid] = false

set :user, "root"
set :runner, "root"
set :use_sudo, false

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

# Add RVM's lib directory to the load path.
#$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
#require "rvm/capistrano"
#set :rvm_ruby_string, '1.9.2'


task :clean_assets, :roles => :app do
  run "rm -rf #{shared_path}/assets/*"
end

task :more_symlinks, :roles => :app do
  # linkage des fichiers de config
  %w(database).each do |config_file|
    run "ln -nfs #{shared_path}/config/#{config_file}.yml #{release_path}/config/#{config_file}.yml"
  end
  run "ln -nfs #{shared_path}/assets #{release_path}/public/assets"
end

task :restart_daemons, :roles => :app do
  #run "cd #{release_path} && bundle exec whenever --set 'environment=#{rails_env}' --update-crontab"
  #run "cd #{release_path} && RAILS_ENV=#{rails_env} ruby script/delayed_job restart"
end


# If you are using Passenger mod_rails uncomment this:
namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end

before :'deploy:assets:precompile', :more_symlinks
4

0 回答 0