はじめに
以下の記事を参考にCapistranoの設定をしていたところ、標題の箇所でエラーが発生し、1週間ほど詰まったので、その解消方法をまとめておきたいと思います。参考記事
https://qiita.com/naoki_mochizuki/items/657aca7531b8948d267bエラー内容
前提として、今回、最も重要であるdeproy.rbにおける、デプロイするブランチの指定については、次のように記述していました。
〜略〜
set :branch, '#5/capistrano'
〜以下、略〜
Capistranoの設定が成功した上で、masterブランチにマージをしたかった(作業ブランチで、エラーの対応含め、あれこれ試したかった)ため、このように作業ブランチをしてしていました。
「#5/」については、自分の管理がしやすいよう、番号を振っていたのですが、これが悪夢の始まりとなりました。
Capistranoの設定を終え、次のとおり、コマンドを実行したところエラーが発生しました。
% bundle exec cap production deploy
00:00 git:wrapper
01 mkdir -p /tmp
〜中略〜
00:06 git:create_release
01 mkdir -p /var/www/myapp/releases/20210903191022
✔ 01 ユーザー名@IPアドレス 0.103s
02 git archive #5/capistrano | /usr/bin/env tar -x -f - -C /var/www/myapp/releases/20210903191022
02 bash: -c: 行 1: 構文エラー: 予期しないファイル終了 (EOF) です
〜以下、略〜
ん、構文エラー?
調査開始
「git archive #5/capistrano | 〜」はCapistranoが実行しているコマンドなので、構文エラーなんてあり得ないだろうという思いをいだきつつ、エラー文の全体を眺めながら、関連しそうキーワードをググり続けました。何も見つからない。
ブランチの指定の方法が間違っているのだろうか?
問題なさそうだ。
引き続き、調査を続け、GitHubにissueを発見しました!
https://github.com/capistrano/capistrano/issues/1126
これだー!と思い、内容を確認するも英語なのですぐにはわかりません。
翻訳ソフトのお世話になって内容を読んでみると…
「解決してへんやないかい!」
※結局、この記事は関係なかったような気がします。
さて、気を取り直して調査を続けます。英語の記事も探しに行きます。
それでも、同じエラーの人を見つけることはできません。
当然、ログも上から下まで何度も読みます。
わからない。ここらで、もう1回エラー文について、よく考えてみよう。
考察
エラーが起きているコマンドはこちら
git archive #5/capistrano | /usr/bin/env tar -x -f - -C /var/www/myapp/releases/20210903191022
このCapistranoが実行しているコマンドのうち、私のコードが影響している箇所があるとすれば、「#5/capistrano」というブランチ名のみです。
もしかして、ブランチ名の「#」や「/」がエラーの原因になっているのではないだろうか?
「/」なんて、ディレクトリの区切りに使っているので、落ち着いて考えれば、怪しすぎる。
というわけで、次のとおり、masterブランチからデプロイするようコードを修正してみました。
git archive master | /usr/bin/env tar -x -f - -C /var/www/myapp/releases/20210903191022
さて、Capistranoを実行してみます。
・・・
通った!
おわりに
エラーの原因が、ブランチ名の「#」だったのか「/」だったのか、はたまたどっちもだったのかまで突き止めることはできませんでしたが、これにて長きに渡るエラーとの戦いに決着がつきました。これだけググっても同じエラーに出会えなかったということは、世界を見渡しても、同じことをやらかした人がいないということでしょうか?
私と同じエラーに出会った人(今後も出てこない?)の役に立てるよう、記録に残しておきます。