Развертывание устаревшего приложения Rails 2.3 на общем хосте и столкновение с ошибкой доступа sudo

У меня есть старое приложение, созданное с помощью Rails 2.3.2. Мне нужно развернуть это приложение с помощью Capistrano на общем хосте. Я использую последнюю стабильную версию Capistrano, которая является 3.3.5. Ниже вы можете найти конкретные версии, которые используются:

Ruby 1.9.3-p551
Ruby Gems 1.5.3
Rails 2.3.2
Capistrano (3.3.5)

Я столкнулся со следующей ошибкой (подробные журналы можно найти здесь):

    INFO [e00fcb66] Running /usr/bin/env sudo /etc/init.d/unicorn_cebucondo_production restart as cebucond@106.186.120.245
    DEBUG [e00fcb66] Command: ( PATH=/usr/local/cpanel/3rdparty/bin/git:$PATH /usr/bin/env sudo /etc/init.d/unicorn_cebucondo_production restart )
    DEBUG [e00fcb66]    stdin: is not a tty
    DEBUG [e00fcb66]    sudo:
    DEBUG [e00fcb66]    effective uid is not 0, is sudo installed setuid root?
    (Backtrace restricted to imported tasks)
    cap aborted!
    SSHKit::Runner::ExecuteError: Exception while executing as cebucond@106.186.120.245: sudo exit status: 1
    sudo stdout: Nothing written
    sudo stderr: stdin: is not a tty
    sudo: effective uid is not 0, is sudo installed setuid root?
    /CCL/lib/capistrano/tasks/restart.cap:6:in `block (4 levels) in <top (required)>'
    /CCL/lib/capistrano/tasks/restart.cap:5:in `block (3 levels) in <top (required)>'
    SSHKit::Command::Failed: sudo exit status: 1
    sudo stdout: Nothing written
    sudo stderr: stdin: is not a tty
    sudo: effective uid is not 0, is sudo installed setuid root?
    /CCL/lib/capistrano/tasks/restart.cap:6:in `block (4 levels) in <top (required)>'
    /CCL/lib/capistrano/tasks/restart.cap:5:in `block (3 levels) in <top (required)>'
    Tasks: TOP => deploy:restart
    (See full trace by running task with --trace)
    The deploy has failed with an error: Exception while executing as cebucond@106.186.120.245: sudo exit status: 1
    sudo stdout: Nothing written
    sudo stderr: stdin: is not a tty
    sudo: effective uid is not 0, is sudo installed setuid root?

У меня нет доступа к sudo на общем хосте, и он также не может быть предоставлен моему пользователю, так как это среда общего хостинга согласно обновлению от службы поддержки общего хоста. Также странно, что я не использую какой-либо конкретный сервер для обслуживания своего приложения на своем удаленном хосте, но все же capistrano пытается запустить скрипт Unicorn, как видно из журнала ниже, и который на самом деле требует доступа sudo и, следовательно, дает сбой.

 INFO [e00fcb66] Running /usr/bin/env sudo /etc/init.d/unicorn_cebucondo_production restart as cebucond@106.186.120.245 

Вот ссылка на мой deploy.rb файл и вот ссылка на мой Capfile,

Обратите внимание, что мое приложение не использует Bundler, поэтому у него нет Gemfile, а используемые гемы помещаются в приложения. vendor/plugins папка.

Кто-нибудь может, пожалуйста, высказать свое мнение о том, как избавиться от ошибок и сделать развертывание успешным?

Спасибо, Джигнеш

1 ответ

Решение

Если у вас нет корневого доступа к машине, вы вряд ли сможете [пере] запустить единорога, используя что-либо в /etc/init.d,

Какой бы плагин, или какой из ваших собственных задач, определяет строку, которая читает sudo /etc/init.d/unicorn_cebucondo_production restart должен быть изменен или удален, и в идеале попытался бы перезапустить единорога, используя сигнал, который может быть разрешен, или, более вероятно, вам придется иметь setuid Скрипт-обертка, который позволяет вам выполнять одно действие от имени root.

Именно по этим причинам Capistrano никогда не поддерживается на общих хостах.

Есть много, много вещей, которые можно сделать, чтобы позволить вам перезапустить единорога, в этом случае, однако, я действительно мог бы предложить вам взглянуть на Пассажира.

Вы можете найти больше мудрости во многих других сообщениях о том, как перезапустить единорога, например, как перезапустить единорога вручную

Другие вопросы по тегам