6

サーバーのセットアップで機能するように Capistrano を構成しようとしています。symfony プロジェクトを展開しているので、capifony も使用しています。パーミッションに関してまだいくつかの問題が発生しています。

私たちのサーバーでは、すべてのプロジェクトがプロジェクト ユーザーとして実行されるため、すべてのプロジェクトには独自のユーザーがいます。そこで、use_sudo を構成して true に設定し、admin_runner をプロジェクトのユーザーに構成しました。しかし、それでもうまくいかなかったので、capifony を変更して、通常の実行の代わりに try_sudo の使用を開始しました。これにより、動作が少し改善されました。しかし、どのような場合に何を使用するかについて少し混乱しています。try_sudo、sudo、および実行があります。しかし、どのユースケースにどれが必要なのでしょうか?

  • runを使用すると、常にローカルユーザーになると思います
  • try_sudo use_sudo フラグが true であるかどうかをチェックすると思います。true の場合は sudo コマンドを使用し、そうでない場合はローカル ユーザーを使用します。admin_runner が構成されている場合、admin_runner として構成されたユーザーに sudo します。
  • sudoは常に sudo を試みます

今私の問題は deploy:symlink メソッドです。これは単なる通常の実行コマンドであるため、ローカル ユーザーとして実行され、Web サイトを表示しようとするとアクセス許可の問題が発生します。

3つのコマンドの説明が正しいかどうか、誰か教えてもらえますか? また、admin_runner と use_sudo がどのように使用されると想定されているかを知っている人はいますか?

敬具、

大安

4

1 に答える 1

4

そのような遅れた答えをお詫びしますダーン。キャピストラーノについてのあなたの理解は正しいです。:use_sudoフラグのデフォルトは。であることにも注意してくださいtrue

Capistrano 2.11.2には、lib / capistrano / configuration/variables.rbがあります。

_cset(:run_method)        { fetch(:use_sudo, true) ? :sudo : :run }

およびlib/capistrano / recipes / deploy.rb:

def try_sudo(*args)
  options = args.last.is_a?(Hash) ? args.pop : {}
  command = args.shift
  raise ArgumentError, "too many arguments" if args.any?

  as = options.fetch(:as, fetch(:admin_runner, nil))
  via = fetch(:run_method, :sudo)
  if command
    invoke_command(command, :via => via, :as => as)
  elsif via == :sudo
    sudo(:as => as)
  else
    ""
  end
end

おそらく、アクセス許可の問題には、サーバーが通常のユーザーとして実行されていて、currentシンボリックリンクが指しているリリースディレクトリの内容を読み取れないことが関係していますか?

于 2012-03-02T15:36:51.720 に答える