Capistrano3のデプロイを学ぶのに、次の記事が大変参考になった。
Capistrano 3によるRails 5.2 + puma + nginxのデプロイをステップバイステップで学ぶ - Qiita
しかし、個人的に詰まったところがいくつかあったので、メモに残しておく。
SSH接続ができない
最初の「1. ssh/gitによるファイルの配置」で早くも躓いた。
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
・・・
何も反映されていない。
当たり前だ。CapistranoはGitHubへクローンしに行くのだから😅