2011-02-14 12 views
4

プロダクションログをローカルマシンにダウンロードするこのタスクがあります。 1つのマシンが稼動していればうまく動作しますが、いくつかのファイルがある場合は、それを上書きします。Capistrano - マシン名

namespace :log do 
    desc "Get production log files" 
    task :get_prod, :roles => :app do 
    download("/home/user/myapp/shared/log/production.log", "log/production.log") 
    end 
end 

私はファイル名に何らかの識別子を追加したいのですが、ユニークですが、私は何を使用するのかよく分かりません。私が使用できるカピストラー変数がありますか?

答えて

4

はい使用できる特殊変数があります。この変数( "$ CAPISTRANO:HOST $")は、宛先ファイルの名前に配置する必要があります。 Capistranoは現在、ファイルを転送するホストの名前で補間します。 *

あなたのコードは次のようになりましたになります。

namespace :log do 
    desc "Get production log files" 
    task :get_prod, :roles => :app do 
    download("#{shared_path}/log/production.log", "log/production.$CAPISTRANO:HOST$.log") 
    end 
end 

は、私はまた、コードをよりDRYにするために、変数 shared_pa​​thを使用したことをご参照ください。 1か所に構成を保存することをお勧めします。 *


文字列補間のためのソースコードは(カピストラーノ2.5.19で)のlib /カピストラーノ/ transfer.rbライン194である:あなたがしようとした場合:

... 
def normalize(argument, session) 
    if argument.is_a?(String) 
    argument.gsub(/\$CAPISTRANO:HOST\$/, session.xserver.host) 
    elsif argument.respond_to?(:read) 
... 

一般的なアドバイス何かをインターネットで最初に見つけて、そこでそれをかなり早く見つけることができなければ、ソースコードを見てください(それは噛まず、あなたが働いているツールがどのように働いているかを知ることができます)。

+0

@ shared_pa​​thリファクタリングの提案へのdeploy_to/sharedの履歴のおかげで@ –