2009-06-08 5 views
4

私はある時点でカピストラーノを呼び出す必要があるレーキタスクのセットを持っています。エドウィン・ゴーイのblogは、「sh」でカピストラノに砲撃することを提案している。rakeの中からcapistranoタスクを実行するには良い方法はありますか?

もっと簡単な方法はありますか?プログラムによって適切なタスクを呼び出すことができるはずです。前もって感謝します。

+1

直ちに終了し、「システム」を続行することができます。 –

答えて

7

はい、Capistranoはコマンドラインコンポーネントにプログラムでアクセスできます。あなたがレーキのタスクからそれらを呼び出す場合は、少し余分な仕事をする必要があります。

task :deploy 
    require 'rubygems' 
    require 'capistrano' 
    require 'capistrano/cli' 

    parameters = ["deploy"] # this is an array of the strings that come after 
          # cap on the command line. e.g., 
          # ["deploy", "-S", "revision=1024"] gives you local var 
          # revision in your deploy.rb. 

    # The following is required ONLY when you run Capistrano 2+ from Rake, 
    # because Rake adds the methods from FileUtils to Object. FileUtils includes 
    # a method called symlink which interferes with Capistrano's symlink task. 
    Capistrano::Configuration::Namespaces::Namespace.class_eval { undef :symlink } 

    Capistrano::CLI.parse(parameters).execute! 
end 
+0

"sh" vs "system"に関する私のコメントに注意してください。 capistranoが "sh"を介してリモートサーバー上で自分のコマンドを実行し、ゼロ以外の戻り値が私のレーキタスクを以前より早く終了させるようです。 私の状況に対してプログラム的な解決策はありますか? ご協力いただきありがとうございます。私は先に進んで、私の特定のケースが最悪のケースだと思ったので、この質問に回答したとマークしました。 –

+0

Capistranoは既定のタスクでも、実行によって何かを呼び出すときにshを使用します。パラメータをrunメソッドに渡すことができます。:shell => false、これはshなしで実行されます。 deploy.rb内でグローバルを設定することもできます(つまり、set:shell、false)。 –

+0

それはあなたの答え以来、いくつかの時間をされている、と私はカピストラーノ2.12.0でこの作業を取得しようとしました。あなたが説明したようにすると、私は次のようになります: "disableという名前のタスクを定義すると、その名前の既存のメソッドがシャドウになります"。いくつかのタスクが2回ロードされているようですね?何か案が? – dabai

-1

ジョナサン、あなたの走行距離は、セットのようなものやっによって異なる場合があります:サブSH-シェルでカピストラーノ実行中のタスクを停止するには(シェル、false)を。

ちょっとしたことがあれば、私にpingをしてもらえますか?

カピストラーノ3について
3

:私は「SH」によって返されるゼロ以外の終了コードがにレーキを引き起こすような「システム」を使用して私の場合には「SH」に好適であることを知っ

http://capistranorb.com/documentation/advanced-features/capistrano-pure-ruby/

require 'capistrano/all' 

    stages = "production" 
    set :application, 'my_app_name' 
    set :repo_url, '[email protected]:capistrano/capistrano.git' 
    set :deploy_to, '/var/www/' 
    set :stage, :production 
    role :app, %w{} 

    require 'capistrano/setup' 
    require 'capistrano/deploy' 
    Dir.glob('capistrano/tasks/*.cap').each { |r| import r } 

    Capistrano::Application.invoke("production") 
    Capistrano::Application.invoke("deploy") 
関連する問題