Just do IT

思うは招く

Capistrano3 のデプロイをステップバイステップでやったときのメモ

Capistrano3のデプロイを学ぶのに、次の記事が大変参考になった。

Capistrano 3によるRails 5.2 + puma + nginxのデプロイをステップバイステップで学ぶ - Qiita

しかし、個人的に詰まったところがいくつかあったので、メモに残しておく。

SSH接続ができない

最初の「1. ssh/gitによるファイルの配置」で早くも躓いた。

SSH接続できない原因はエラー内容によって変わる。 対処法は次にまとめた。

Capistrano で SSH 接続ができないとき

ディレクトリをつくるときに permission denied

この記事に詳細を書いている。

Capistrano で cannot create directory Permission denied エラー - オランウータンとぼく

以下のgemを追加して解決した。

group :development do
  gem 'capistrano-safe-deploy-to'
end

プリコンパイルで Yarn requires Node.js 4.0 or higher to be installed エラー

これについては次の記事で解説している。

Capistrano3 デプロイ時に Yarn requires Node.js 4.0 or higher to be installed エラーで落ちる - オランウータンとぼく

要点をいうと、リモートサーバにNode.jsやYarnをインストールしていたはずが、動かなかった。しかし、apt-getでシステムにインストールすると解決した。

リモートサーバで bundle installができない

リモートサーバにbundlerをインストールして解決した。

#リモートサーバ
gem i bundler

pumaの起動やステータスが確認できない

# これでは動かない
bundle exec cap puma:start
bundle exec cap puma:stop
bundle exec cap puma:status

上記コマンドでリモートサーバのpumaを起動/停止や、ステータスを確認できると紹介されていた。

しかし、やってみてもこんなふうにエラーが出る。

$ bundle exec cap puma:status
Stage not set, please call something such as `cap production deploy`, where production is a stage you have defined.

環境の設定をしろと言われている。 次のようにしたら解決した。

# productionをつける
$ bundle exec cap production puma:status
00:00 puma:status
      WARN  Puma not running

その他のコマンドについても、productionをつけることで解決する。

$ bundle exec cap production puma:start
$ bundle exec cap production puma:stop
$ bundle exec cap production puma:status

ローカルからリモートサーバのpumaをコントロールできるとは、なんて便利なのか・・・!

ローカルを変更したらGitHubにプッシュしないとデプロイ時に反映しない

ローカルでアプリに変更を加えたら、まずはGitHubにプッシュして変更を反映させる。 その後にデプロイコマンドを叩く。

ローカルで試しに新しくscaffoldコマンドを打って、なにか作ってみた。

$ bundle exec scaffold Memo title:string memo:text
$ bin/rails db:migrate

ローカルで動くことを確認し、いざデプロイ!

$ bundle exec cap production deploy

・・・

何も反映されていない。

当たり前だ。CapistranoGitHubへクローンしに行くのだから😅