Capistrano,Debian 8 systemctl

时间:2016-04-05 13:06:10

标签: ruby capistrano unicorn

我想使用capistrano 3 在我的vps上部署我的网络应用程序。不幸的是,我收到了一些错误:

<!DOCTYPE html>
<html>

<head>
  <style>
    .one {
      color: red;
    }
    .one li {
      color: blue;
    }
    .one .two {
      color: pink;
    }
    .one .two .three {
      color: purple;
    }
    .two {
      color: green;
    }
    .one.two {
      color: yellow;
    }
    .two.three {
      color: grey;
    }
  </style>
</head>

<body>
  <div class="one">
    <ul class="two">
      <li>Item One</li>
    </ul>
  </div>

  <div class="three two one">
    <p>TEST</p>
  </div>
</body>

</html>

据我所知,这些失败的测试都没问题,因为它只检查符号链接和目录的存在。但以下是游戏破坏者:

DEBUG [6de1d411] Running [ -L /var/www/myapp/releases/20160405125654/log ] as user@example.com
DEBUG [6de1d411] Command: [ -L /var/www/myapp/releases/20160405125654/log ]
DEBUG [6de1d411] Finished in 0.005 seconds with exit status 0 (successful).
DEBUG [cf28b01d] Running [ -L /var/www/myapp/releases/20160405125654/tmp/pids ] as user@example.com
DEBUG [cf28b01d] Command: [ -L /var/www/myapp/releases/20160405125654/tmp/pids ]
DEBUG [cf28b01d] Finished in 0.005 seconds with exit status 1 (failed).
DEBUG [c7f0b156] Running [ -d /var/www/myapp/releases/20160405125654/tmp/pids ] as user@example.com
DEBUG [c7f0b156] Command: [ -d /var/www/myapp/releases/20160405125654/tmp/pids ]
DEBUG [c7f0b156] Finished in 0.005 seconds with exit status 1 (failed).

显然,Debian jessie依赖INFO [c1b0c10e] Finished in 0.007 seconds with exit status 0 (successful). INFO [e895fd13] Running /usr/bin/env sudo /etc/init.d/nginx reload as user@example.com DEBUG [e895fd13] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.2.3" ; /usr/bin/env sudo /etc/init.d/nginx reload ) DEBUG [e895fd13] Reloading nginx configuration (via systemctl): nginx.service DEBUG [e895fd13] . INFO [e895fd13] Finished in 0.037 seconds with exit status 0 (successful). INFO [1a822f12] Running /usr/bin/env service unicorn_myapp_production restart as user@example.com DEBUG [1a822f12] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.2.3" ; /usr/bin/env service unicorn_myapp_production restart ) DEBUG [1a822f12] /usr/bin/env: service DEBUG [1a822f12] : No such file or directory (Backtrace restricted to imported tasks) cap aborted! SSHKit::Runner::ExecuteError: Exception while executing as user@example.com: service exit status: 127 service stdout: Nothing written service stderr: /usr/bin/env: service: No such file or directory 代替systemctl,因为

service

确实不存在。不,我想通过添加

来覆盖默认行为
/usr/bin/env service

namespace :unicorn do task :defaults do on roles :app do set :unicorn_user, fetch(:unicorn_user, deploy_user) end end desc 'Setup Unicorn initializer' task :setup_initializer do on roles :app do next if file_exists? unicorn_initd_file sudo_upload! template('unicorn_init.erb'), unicorn_initd_file execute :chmod, '+x', unicorn_initd_file sudo 'update-rc.d', '-f', fetch(:unicorn_service), 'defaults' end end desc 'Setup Unicorn app configuration' task :setup_app_config do on roles :app do next if file_exists? fetch(:unicorn_config) execute :mkdir, '-pv', File.dirname(fetch(:unicorn_config)) upload! template('unicorn.rb.erb'), fetch(:unicorn_config) end end %w[start stop restart].each do |command| desc "#{command} unicorn" task command do on roles :app do # execute :service, fetch(:unicorn_service), command # run "#{sudo} systemctl #{command} unicorn_#{application}" sudo "/etc/init.d/unicorn_#{fetch(:unicorn_service)} #{command}" end end end before :setup_initializer, :defaults end 。但是卡皮斯特拉诺忽略了这个设置。那么如何确保加载特定于Debian-8的配置。

1 个答案:

答案 0 :(得分:0)

我不熟悉独角兽,但我认为你正在使用定义上限任务的东西,然后你试图覆盖?如果是这种情况,使用Capistrano 3,您需要在重新定义之前清除原始任务。您目前正在做的事情扩展了任务。您需要使用Rake::Task["task_name"].clear这样的内容:

namespace :unicorn do
  %w[start stop restart].each do |command|
    Rake::Task["unicorn:#{command}"].clear

    desc "#{command} unicorn"
    task command do
      on roles :app do
        # execute :service, fetch(:unicorn_service), command
        # run "#{sudo} systemctl #{command} unicorn_#{application}"
        sudo "/etc/init.d/unicorn_#{fetch(:unicorn_service)} #{command}"
      end
    end
  end
end