1

OpsWorks を使用して単純な PHP アプリケーションを確実にデプロイすることに深刻な不満を感じています。srv/www/app-name/releasesディレクトリの管理方法に関するドキュメントが見つかりませんが、それが現在の問題の原因である可能性があると思います。

私は Laravel アプリケーションをデプロイしているので、デプロイ時に Chef レシピで 2 つのことを行う必要があります。composer のインストールと、いくつかのディレクトリを書き込み可能にすることです。Composerは正常にインストールされているようですが、ディレクトリを作成してchmodする私のレシピは以前のリリースで発生したようです-これは私にはまったく意味がありません.

コンポーザーをインストールします。

node[:deploy].each do |application, deploy|
  script "composer-install" do
    interpreter "bash"
    cwd "#{deploy[:deploy_to]}/current"
    user "root"
    code <<-EOH
    composer install
    EOH
  end
end

これは問題なく動作します。これを実行すると、依存関係が表示されるため、ベンダー ディレクトリを更新できます。しかし、次に実行するレシピは次のとおりです。

node[:deploy].each do |application, deploy|
    Chef::Log.info("Application path: #{deploy[:deploy_to]}");

    node['directories'].each do |path|

        # Get the path we need
        new_path = "#{deploy[:deploy_to]}/current/"+path

        Chef::Log.info("Checking directory: "+new_path);

        # Ensure the dir exists
        unless File.exists?(new_path)
            Chef::Log.info("Creating directory: "+new_path);
            Dir.mkdir( new_path, 777 )
        end

        # Ensure its writable
        File.chmod( 777, new_path )

    end
end

からのコンテンツChef::logはログに表示されますが、エラーはありませんが、ディレクトリは単純にそこにありませんrelease/timestamp。このレシピの期間中に「現在の」シンボリックリンクが元に戻ったかのように、それらは PREVIOUS ディレクトリに作成されます。また、権限「411」で作成されます。

ここで私が間違っている場所を誰かが説明できますか? 「現在の」シンボリック リンクを使用する代わりに、新しいディレクトリ パスにアクセスできますか?

4

1 に答える 1

0

発生する可能性が非常に高いのは、これら 2 つの指定されたレシピを展開の異なる段階で適用することです。Current を使用しているため、アプリケーションの次の部分をチェックアウトしている間、ある段階では古いディレクトリになります。

代わりにすべきことは次のとおりです。

  1. レシピで「#{ release_path }」変数を使用して、アプリでビルド固有のファイル/イベントを生成します。
  2. deploy/before_restart.rb ファイルを使用して、予測可能な場所にファイルを提供するいくつかのシンボリック リンクを実行します。

呼び出されているレシピのスクリーンショットと、レイヤー編集ビューからどのレイヤーで提供されているかを提供すると、ここにいる人々が何が起こっているかを確認し、より良いフィードバックを提供するのに役立ちます.

于 2014-04-13T23:33:48.327 に答える