事象
昔作ったRailsアプリを久しぶりに修正しデプロイしようとしたところ、以下のエラーが出力されました。
# 実行コマンド
Running /usr/bin/env mkdir -p /var/www/app/shared/config/master.key /var/www/app/shared/log ...
# エラー内容
mkdir: ディレクトリ `/var/www/app/shared/config/master.key' を作成できません
Capistranoの設定ファイルは以下の通りです(抜粋)。
deploy.rb
set :linked_files, fetch(:linked_files, []).push('config/master.key')
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', ..., 'public/system')
一行目はシンボリックリンクを張るファイル、二行目はシンボリックリンクを張るディレクトリをそれぞれ設定しています。しかし、上記の実行コマンドを見るとなぜか一行目のシンボリックリンクを張るファイルであるconfig/master.key
までディレクトリとして作成しようとしています。
/var/www/app/shared/config/
ディレクトリ配下には手動でmaster.key
ファイルを作成しているため、同名のディレクトリを新たに作成することができないというエラー内容です。
原因
はっきりとした原因はわかりませんが、以前は同様の設定でエラーは出ていなかったことを考えると、Capistranoのバージョンが関係しているのかもしれません。
対処
Capistranoの設定ファイルを以下のように修正します。
deploy.rb
set :linked_files, %w(config/master.key)
set :linked_dirs, %w(log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system)
こうすることでなぜかエラーは出なくなりました。%w
はRubyの%記法のひとつで、空白区切りの文字列配列を定義できます。