LoginSignup
25
26

More than 5 years have passed since last update.

capistrano3: cap [env] deployでsudo mkdirする

Last updated at Posted at 2014-05-28

cap [env] deploy した時にmkdirでpermission deniedに遭遇した。
検索するとすぐ出てくる話なので、あるあるなんだろうけどメモしておく。

問題のコードはこのタスク以降のdeploy:check関係

capistrano-3.2.1/lib/capistrano/tasks/deploy.rake
 43   namespace :check do
 44     desc 'Check shared and release directories exist'
 45     task :directories do
 46       on release_roles :all do
 47         execute :mkdir, '-pv', shared_path, releases_path
 48       end
 49     end

shared_pathとかreleases_pathの場所に権限がないと怒られる。
公式とかこの辺を見ると、sudoを使う方法が紹介されてたので真似してみた。
今回はあくまでcap [env] deployを使いたかったので、deploy:check:directoriesをorverwriteすることにした。

deploy.rb
namespace :deploy do
  Rake::Task["deploy:check:directories"].clear

  namespace :check do
    desc '(overwrite) Check shared and release directories exist'
    task :directories do
      on release_roles :all do
        execute :sudo, :mkdir, '-pv', shared_path, releases_path
        execute :sudo, :chown, '-R', "#{fetch(:user)}:#{fetch(:group)}", deploy_to
      end
    end
  end

(たぶん)ミソはdeploy:check:directoriesを一旦消してから定義してるところ。
それと、mkdirの後にchownでdeploy_toの所有者を変えてるところ。
deploy:check:directoriesは一旦消さないと、overwriteしても古い方のタスクが呼ばれて解決しなかった。
chownしてるのは、deploy:check:directories以降のタスクでもmkdirしてるので、丸ごと所有者を変えて、以降の処理ではsudo不要にしたかったため。

25
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
26