在共享主机上部署遗留 Rails 2.3 应用程序并面临 sudo 访问错误

Deploying a legacy Rails 2.3 application on a shared host and facing sudo access error

我有一个使用 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)

我遇到以下错误(详细日志可以在 gist 此处找到):

    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 

这是我 Capfilelink to my deploy.rb file and here is the link

请注意,我的应用程序不使用 Bundler,因此它没有任何 Gemfile,所使用的 gem 位于应用程序的 vendor/plugins 文件夹中。

任何人都可以提供有关如何消除遇到的错误并使部署成功的意见吗?

谢谢, 吉格尼什

如果您没有计算机的 root 访问权限,您不太可能使用 /etc/init.d 中的任何内容[重新]启动 unicorn。

无论哪个插件,或者你自己的哪个任务定义了 sudo /etc/init.d/unicorn_cebucondo_production restart 行,都必须更改或删除,理想情况下会尝试使用 signal, which may be allowed, or more likely you will have to have a setuid 包装脚本重新启动 unicorn允许您以 root 身份执行 一个 操作。

由于这些原因,Capistrano 从未在共享主机上得到支持。

有很多很多事情可以让你重新启动独角兽成为可能,但在这种情况下,我可能真的建议你看看 Passenger

您可能会在许多其他关于如何重启 unicorn 的 SO 帖子中找到更多智慧,例如 how to restart unicorn manually