Capistrano problem

Od 2 dni korzystam z capistrano.

Mam następujący problem :

kiedy próbuje zrobić deploy:

  • utrzymuję prośbe wpisania hasła

Moje ustawienia:

  • mam ustawiony klucz publiczny , przez ssh łącze się normalnie

  • próbowałem też ustawić ssh_options[:forward_agent] = true , ale to nic nie pomoga.

To nie działa http://stackoverflow.com/questions/3269578/capistrano-asks-for-password-when-deploying-despite-ssh-keys ?

nie , znaczy problem nie jest taki ,że wpisuje hasło i robi mi się deploy tylko wogóle nie jestem w stanie zrobić deploya.

próbowałeś logować/badać logi http://stackoverflow.com/questions/8037726/how-to-log-the-capistrano-deployment-result ?

Sprawdź czy recepta capistrano łączy się z dobrym hostem i czy użyty jest dobry użytkownik.

Na przykład jeśli masz:

set :user, "foo" server "bar.com", :app, :db, :primary => true
to odpowiadające polecenie ssh bedzie:

ssh foo@bar.com

tak masz i działa SSH a Capistrano nie?

dokładnie stąd moje pytanie.

Ja mam coś takiego, może pomoże

set :use_sudo, false ssh_options[:forward_agent] = true default_run_options[:pty] = true

Btw. pyta cię o hasło przed rozpoczęciem deploya, czy w trakcie kasowania starszych releasów ? Jeżeli w trakcie kasowania releasów to dodam od siebie ze capistrano domyślnie odpalając task kasujący starsze releasy ( zostawiający 5 najnowszych - domyślnie) odpala się z sudo , także pierwsza linijka wklejona przez doliego powinna pomóc.

Czy działa? $ cap shell
i następnie

cap> ls

[quote=doli]Ja mam coś takiego, może pomoże

set :use_sudo, false ssh_options[:forward_agent] = true default_run_options[:pty] = true
[/quote]
Linijki nic nie pomogły.

Cap shell ( działa ) następnie ls prosi o hasło ( nie wiem generalnie o jakie) , no i następnie już Net::SSH::AuthenticationFailed

Wklej jakie informacje dostajesz przed prośbą o wpisanie hasła.

triggering start callbacks for `deploy’

  • 2013-03-11 21:07:42 21:07:42 == Currently executing multistage:ensure' *** Defaulting todev’
  • 2013-03-11 21:07:42 21:07:42 == Currently executing `dev’
  • 2013-03-11 21:07:42 21:07:42 == Currently executing `deploy’
  • 2013-03-11 21:07:42 21:07:42 == Currently executing `deploy:update’
    ** transaction: start
  • 2013-03-11 21:07:42 21:07:42 == Currently executing `deploy:update_code’
    executing locally: “git ls-remote git@git.assembla.com:guarantees-box.git master”
    command finished in 3114ms
  • executing “git clone -q git@git.assembla.com:guarantees-box.git /home/gbox/www/gbox_dev/releases/20130311200745 && cd /home/gbox/www/gbox_dev/releases/20130311200745 && git checkout -q -b deploy 9ffc9310d3d2458a43df0dbe7f359055759ee512 && (echo 9ffc9310d3d2458a43df0dbe7f359055759ee512 > /home/gbox/www/gbox_dev/releases/20130311200745/REVISION)”
    servers: [“ip_servera”]

Kolego, pokaż error i to co do niego prowadzi, bo my Ci za cholerę nie pomożemy. Gdzie w tym kodzie jest błąd? Nie ma. Pokaż jeszcze co się dzieje dalej. Ale będę strzelał dalej.

Problem prawdopodobnie jest z dosŧępem do zdalnego repozytorium git z serwera produkcyjnego. Sprawdź czy po zalogowaniu się na ssh możesz zrobić “ssh git@git.assembla.com:guarantees-box.git”. Możliwe że poprosi Cię o zaakceptowanie klucza SSH po fingerprincie, i wtedy wystarczy że to zrobisz i powinno zadziałać.

Jeśli “ssh git@…” wywali permission denied, a lokalnie nie, to masz problem z forward agentem, który powinien być włączony również na serwerze w pliku /etc/ssh/ssh_config.

Jeśli zacinało Ci się na git clone, to wiedz, że wczoraj też mieliśmy ten problem. Prawdopodobnie problem z samym githubem i dopiero po 2-3 restartach to łapało, nie wiadomo czemu. :expressionless:

@konole oni zdają się nie używać githuba.

Odkopię temat żeby nie robić nowego.

Chcę zrobić automatyczny deploy poprzez capistrano wraz z restartem aplikacji żeby od razu było widać zmiany.
Pierwszy problem może nie dotyczy dokładnie capistrano, ale ubuntu. Stworzyłem użytkownika “deploy”, któremu chcę nadać dokładnie takie same prawa jak ma “root”. W /etc/sudoers dodałem:

# User privilege specification root ALL=(ALL:ALL) ALL deploy ALL=(ALL:ALL) ALL
Niestety to nie do końca pomogło. W tej chwili jak chcę zrobić deploy dostaję:

[78.46.194.246] executing command ** [00.00.000.000 :: out] error: insufficient permission for adding an object to repository database .git/objects ** [00.00.000.000 :: out] ** [00.00.000.000 :: out] ** [00.00.000.000 :: out] fatal: failed to write object ** [00.00.000.000 :: out] ** [00.00.000.000 :: out] fatal: unpack-objects failed ** [00.00.000.000 :: out]
Postanowiłem więc spróbować za pomocą roota. Proces zostaje zabity, ale aplikacja nie wstaje:

[78.46.194.246] executing command ** [out :: 00.00.000.000] Could not find gem 'rails (~> 3.2.13)' in any of the gem sources listed in your Gemfile.
plik deploy.rb:

[code]set :application, “project”
set :repository, "git@github.com:qwerty/qwerty.git"
set :scm, :git
set :user, “root”
set :use_sudo, false
set :deploy_to, “/Apps/#{application}”
set :deploy_via, :remote_cache
set :normalize_asset_timestamps, false

ssh_options[:forward_agent] = true
default_run_options[:pty] = true

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

set :rvm_ruby_string, ‘1.9.3-p125’

namespace :deploy do
namespace :app do
task :copy_config do
run “cp #{shared_path}/config/* #{current_release}/config/”
end
end

task :start do
run “cd #{current_path} && ./bin/app start”
end

task :stop do
run “cd #{current_path} && ./bin/app stop”
end

task :restart do
run “cd #{current_path} && ./bin/app restart”
end
end

after ‘deploy:finalize_update’, ‘deploy:app:copy_config’[/code]
plik app:

[code]#!/usr/bin/env ruby

require ‘yaml’

def start
system “bundle exec rails s -d -p3006”
end

def stop
pid = File.read(“tmp/pids/server.pid”).strip
system “kill -TERM #{pid}”
end

def restart
stop
start
end

case ARGV.first
when ‘start’
start
when ‘stop’
stop
when ‘restart’
restart
else
puts ‘start | stop | restart’
end[/code]
Serwer jest na ubuntu 12.04, nginx + thin

Będę wdzięczny za pomoc jak również inne uwagi dotyczące capistrano :slight_smile:

Robisz to zle. User uzywany w deployu nie powinien miec praw root

Problem jest wyzej, apka nie powinna dzialac na koncie root. Masz tam pewnie kilka wiecej problemow.

Apke odpal jako user i wtedy user ja sobie zrestartuje