2012-09-10 5 views
10

何らかの理由により、私のcurrent_path/u/apps/であると思われるため、私は、(AFAIK)を設定する必要があるすべての変数を設定し、他のすべての同様のデフォルトのパスを削除しましたが、これも存続します。ここで私が設定したにもかかわらず、カプリストラノがcurrent_pathで/ u/apps /を使用しているのはなぜですか?deploy_to

は、関連する変数で返される値は次のとおりです。

current_dir: current 
releases_path: /var/www/vhosts/dev.www.example.com/html/releases 
shared_path: /var/www/vhosts/dev.www.example.com/html/shared 
current_path: /u/apps/www.example.com/current 

私は:deploy_toを設定していますので、current_pathはそれに基づいて計算すべきではありません!

set :deploy_to, "/var/www/vhosts/dev.www.example.com/" 
+2

これは、current_pathがdeploy_toの前に読み取られている可能性があります。例えば、私はset:sidekiq_pidを持っていましたが、production.rbファイル内のdeploy_toの前に "#{current_path} /tmp/pids/sidekiq.pid"が呼び出され、デフォルトで/ u/appsになりました。 – JohnMerlino

+0

上記の@JohnMerlinoのコメントが私の答えでした。最も簡単な解決策、あなたのコードで行う最も簡単な「間違い」。 Occamのシェーバーはこれが答えだと言っています:-) – LpLrich

答えて

6

kludgey液の種類がちょうどに手動

set :current_path, "" 

better solution, which can be found explained in this e-mail thread by Jamis Buck himselfである、あなたはcurrent_pathに依存して別の変数を設定すると、遅延評価を使用することです。私の場合、私はこのようなものに変更する必要がありました。この

set :some_path_var, "#{current_path}/some/path/" 

のような設定に何か持っていた:ブロックに渡すことにより

set(:some_path_var) { "#{current_path}/some/path/" } 

を、:some_path_varはすぐに評価されなかった、と:deploy_to

2

のデフォルト値に基づいて、current_pathを評価するよう強制しませんでした。この問題も同様に発生し、これが最適な解決策であることがわかりました。

私はこれもできカピストラーノ宝石のソースを見て、

lib/capistrano/recipes/deploy.rb

1

_cset(:current_path) { File.join(deploy_to, current_dir) を見つけることからアイデアを得たあなたのconfig/deploy.rb

desc "Make sure the symlink will be from the right directory" 
    task :change_correct_dir, roles: :web do 
    set :current_path, File.join(deploy_to, current_dir) 
    end 
    before "deploy:create_symlink", "deploy:change_correct_dir" 

にこれを追加capコマンドでタスクを指定しなかった場合に起こります。 deploy_to:

cap deploy:setup 

はで指定されたディレクトリにカピストラーノを設定しますU//アプリの

cap production deploy:setup 

にカピストラーノを設定しようとします。

+0

これは、マルチステージプラグインがロードされている場合にのみ当てはまります。 –

関連する問題