2013-03-14 2 views
5

Развертывание с capistrano. Все идет хорошо, а затем во время развертывания: запуск (при развертывании: холодной), он выдает ошибку:Капистрано развертывание: начать с единорога

* ←[32m2013-03-14 15:03:05 executing `deploy:start'←[0m 
    * ←[33mexecuting "/etc/init.d/unicorn_appname start"←[0m 
    servers: ["XXX.XXX.131.4"] 
    [XXX.XXX.131.4] executing command 
** [out :: XXX.XXX.131.4] sh: /etc/init.d/unicorn_appname: not found 
    ←[2;37mcommand finished in 1572ms←[0m 
failed: "sh -c '/etc/init.d/unicorn_appname start'" on XXX.XXX.131.4 

Файл в вопросе существует. Вот его содержание:

#!/bin/sh 
### BEGIN INIT INFO 
# Provides:   unicorn 
# Required-Start: $remote_fs $syslog 
# Required-Stop:  $remote_fs $syslog 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: Manage unicorn server 
# Description:  Start, stop, restart unicorn server for a specific application. 
### END INIT INFO 
set -e 

# Feel free to change any of the following variables for your app: 
TIMEOUT=${TIMEOUT-60} 
APP_ROOT=/root/apps/appname/current 
PID=$APP_ROOT/tmp/pids/unicorn.pid 
CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" 
AS_USER=root 
set -u 

OLD_PIN="$PID.oldbin" 

sig() { 
    test -s "$PID" && kill -$1 `cat $PID` 
} 

oldsig() { 
    test -s $OLD_PIN && kill -$1 `cat $OLD_PIN` 
} 

run() { 
    if [ "$(id -un)" = "$AS_USER" ]; then 
    eval $1 
    else 
    su -c "$1" - $AS_USER 
    fi 
} 

case "$1" in 
start) 
    sig 0 && echo >&2 "Already running" && exit 0 
    run "$CMD" 
    ;; 
stop) 
    sig QUIT && exit 0 
    echo >&2 "Not running" 
    ;; 
force-stop) 
    sig TERM && exit 0 
    echo >&2 "Not running" 
    ;; 
restart|reload) 
    sig HUP && echo reloaded OK && exit 0 
    echo >&2 "Couldn't reload, starting '$CMD' instead" 
    run "$CMD" 
    ;; 
upgrade) 
    if sig USR2 && sleep 2 && sig 0 && oldsig QUIT 
    then 
    n=$TIMEOUT 
    while test -s $OLD_PIN && test $n -ge 0 
    do 
     printf '.' && sleep 1 && n=$(($n - 1)) 
    done 
    echo 

    if test $n -lt 0 && test -s $OLD_PIN 
    then 
     echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds" 
     exit 1 
    fi 
    exit 0 
    fi 
    echo >&2 "Couldn't upgrade, starting '$CMD' instead" 
    run "$CMD" 
    ;; 
reopen-logs) 
    sig USR1 
    ;; 
*) 
    echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>" 
    exit 1 
    ;; 
esac 

Попробовав запустить команду через SSH (ш -c «/etc/init.d/unicorn_appname начать»), я столкнулся с той же ошибки.

В чем причина?

ответ

1

Благодарим вас за предложения. Проблема окончательно решена. Проблема оказалась при развертывании с Windows-машины - .sh-файл имел окончание строк в стиле Windows и не мог быть правильно прочитан unix. Решение было связано с изменением настроек IDE (для Rubymine: File-> Settings-> Code style-> General-> Line separator-> unix) и воссозданием файла. Затем: git add. мерзавец совершить -м «исправить» мерзавец нажимной колпачок развертывания: установка крышки развернуть: холодная

Готово! Еще раз спасибо eveybody!

P.S .: кто-нибудь знает, почему трубопровод активов не работает после развертывания?

+0

Что говорят журналы, когда конвейер ресурса не работает? –

+0

Они ничего не говорят. Активы просто не загружаются. Например, не используется css, кроме встроенного. –

+0

У вас есть «активы/развертывание» загрузки в вашем Capfile? –

1

Это, скорее всего, происходит, если вы связаны с относительным путем против абсолютного пути. Попытайтесь сделать символическую ссылку, предоставив абсолютный путь.

chmod +x /home/username/app/app_name/current/config/unicorn_init.sh

ln -nfs /home/username/app/app_name/current/config/unicorn_init.sh /etc/init.d/unicorn_app_name

И посмотреть, если это работает

+0

Спасибо за ответ. Я пробовал, не работает. Даже не производит никакого вывода. Кстати, если вы укажете какие-либо данные, кстати? –

+0

Просто прошу .. Вы попробовали символическую ссылку с помощью 'sudo'? – benchwarmer

+0

Да, у меня есть. И в deploy.rb это также написано так: 'sudo 'ln -nfs # {current_path} /config/nginx.conf/etc/nginx/sites-enabled/# {application}" 'sudo" ln -nfs # {current_path} /config/unicorn_init.sh /etc/init.d/unicorn _ # {application} " –

0

Ваш Capistrano развёртывании: запуск задачи следует читать

task :start, :roles => :app, :except => { :no_release => true } do 
    run "/etc/init.d/unicorn start" 
end 

Если вы намеренно не назвал ваш единорог файл инициализации/и т.д./инициализации .d/unicorn_appname.

Имеет ли пользовательский доступ к развертыванию capistrano разрешение на выполнение этого файла?

+0

Он назван так. Задача выглядит следующим образом: '% w [start stop restart] .each do | command | (/ n) desc "# {command} unicorn server" (/ n) task command, role:: app, except: {no_release: true} do (/ n) run "/etc/init.d/unicorn_ # {application} # {command} "(/ n) end (/ n) end' –

+0

Работает ли« /etc/init.d/unicorn_appname start », когда вы запускаете его во время sshd в качестве пользователя развертывания capistrano?Или это также дает ошибку? –

+0

Он не работает, и он также дает ту же ошибку: 'sh: /etc/init.d/unicorn_appname: not found' –

Смежные вопросы