1

私は次のシェフクックブックを持っています:

deploy "/home/prj" do
  repo "https://path_to_repo"
  user node.project_owner
  group node.project_owner
  symlink_before_migrate({})
end

プロバイダーのリリースパスにアクセスするにはどうすればよいですか?私の場合、次のようになります:/ home / prj/releases/20120506125222/。

4

1 に答える 1

2

リリースパスにアクセスする場所によって異なります。リソース、つまりコールバックの「内部」は、iikeを使用して簡単に実行できます

deploy "/home/prj" do
  before_migrate do
    gemfile = File.read("#{release_path}/Gemfile")
  end
end

リソースの外部では、release_path変数を使用できません。ただしcurrent、現在デプロイされているバージョン、つまり最後のリリースを指すシンボリックリンクを使用できます。

current_path = "home/prj/current"
release_path = File.readlink(current_path)

current_pathほとんどの場合、シンボリックリンクターゲットの解決に頼ることなく、直接物事に取り組むことができます。

とは言うものの、通常、実際にそこで直接何かをしたくはありません。代わりに、共有ディレクトリ(つまり/home/prk/shared)に追加のファイルを生成し、デプロイ中にchefにそれらのファイルをリリースにシンボリックリンクさせることをお勧めします。それがまさにそのsymlink_before_migrate目的です。そうすれば、実際にリリースパスを自分で知る必要はありませんが、シェフにそれを処理させることができます。

于 2012-05-08T11:26:01.600 に答える