2017-01-04 8 views
0

curlで実行中のアプリケーションのリビジョンを取得しているCapistrano 3(lib/capistrano/tasks/revision)にカスタムタスクを書いています。カスタムタスクを構成するにはどうすればいいですか。

次に、実行中のバージョンと展開された最新のバージョンを比較し、それらが同じでない場合はエラーをスローする必要があります。

実行中のアプリケーションのリビジョンが取得され、空の文字列と比較されるため、エラーがスローされます。

私が抱えている問題は、このタスクの出力がきれいではないことです。それは単なる白いテキストです。

私には何が欠けていますか?私は一日中ドキュメントを掘り下げてきました。

よろしくお願いいたします。

revision.rake:

namespace :revision do 
    desc 'Check revision of all applications to determine if the application is running the latest deployed revison' 
    task :check do 
    puts 'Checking revision of all supported applications' 

    invoke 'revision:httpapi' 
    end 

    task :httpapi do 
    on roles(:httpapi), in: :sequence do |host| 
     puts "Checking revision of httpapi on #{host}" 
     begin 
     response = capture "curl -L 'http://#{fetch(:diagnostics_username)}:#{fetch(:diagnostics_password)}@#{host}/diagnostics/status?mode=extended&output=detailed'" 
     object = JSON.parse(response, object_class: OpenStruct) 

     unless object.result.revision == "" #For test, just compare to empty string so error is thrown 
      raise 'The running revision is not the same as the installed, please restart all applications' 
     end 
     rescue Exception => e 
     raise e.message 
     end 
    end 
    end 
end 

出力:あなたはよ、これらの線に沿ってhttps://github.com/capistrano/capistrano/blob/master/lib/capistrano/tasks/deploy.rake#L91

:同様の問題の良い例は、コアで解決されて

[email protected] ~/Development/tulo-deployment (master) $ cap test revision:check 
Enter a branch or tag name to deploy (defaults to develop) 
Please enter branch (develop): 
Deploying branch/tag: develop 
rvm 1.28.0 (latest) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/] 
rvm 1.28.0 (latest) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/] 
ruby-1.9.3-p545 
ruby-1.9.3-p545 
ruby 1.9.3p545 (2014-02-24 revision 45159) [x86_64-linux] 
ruby 1.9.3p545 (2014-02-24 revision 45159) [x86_64-linux] 
Checking revision of all supported applications 
Checking revision of httpapi on 10.30.1.1 
(Backtrace restricted to imported tasks) 
cap aborted! 
The running revision is not the same as the installed, please restart all applications 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:20:in `rescue in block (3 levels) in <top (required)>' 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:12:in `block (3 levels) in <top (required)>' 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:10:in `block (2 levels) in <top (required)>' 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:6:in `block (2 levels) in <top (required)>' 
The running revision is not the same as the installed, please restart all applications 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:17:in `block (3 levels) in <top (required)>' 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:10:in `block (2 levels) in <top (required)>' 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:6:in `block (2 levels) in <top (required)>' 
Tasks: TOP => revision:httpapi 
(See full trace by running task with --trace) 
+0

それは役立つだろう。そうでなければ、本質的に誰かにCapistrano出力ドキュメントを書くように依頼しています。ここには部分的に存在しています:https://github.com/capistrano/sshkit#output-handling –

+0

もちろん、私が書いたときに私はその部分にアクセスできませんでした質問ですが、私はそれを追加しました。 – gonace

答えて

1

はこちらおそらくコードは次のようになります:

task :httpapi do 
    on roles(:httpapi), in: :sequence do |host| 
    puts "Checking revision of httpapi on #{host}" 
    response = capture "curl -L 'http://#{fetch(:diagnostics_username)}:#{fetch(:diagnostics_password)}@#{host}/diagnostics/status?mode=extended&output=detailed'" 
    object = JSON.parse(response, object_class: OpenStruct) 

    unless object.result.revision == "" #For test, just compare to empty string so error is thrown 
     error 'The running revision is not the same as the installed, please restart all applications' 
     exit 1 
    end 
    end 
end 

編集:

色付きのテキストを出力するためには、あなたが使用することができますから、

Airbrussh::Colors.green('Your message') 

:あなたがしようとしているコードを示した場合https://github.com/mattbrictson/airbrussh/blob/master/lib/airbrussh/colors.rb

+0

それは物事を働かせるようですが、出力は白い平野のテキストですが、何が欠けていますか? – gonace

+0

色付きのテキストは通常​​、コマンド出力の一部です。他の出力に複製しようとしている別の例がありますか? –

+0

こんにちは、今のようにタスクがエラーで存在する場合、テキストは単なる白で、簡単に見逃される可能性のあるエラーを表示します。 私はCapistranoと同じ出力を表示するためにタスクを実行しようとしています。「実行する」ので、出力の変更を「実行する」ように変更した場合です。しかし、私はcurlコマンドの出力をキャプチャする必要があります。 アイデア – gonace

関連する問題