capistrano・EC2・postgresql・rails6で自動デプロイ設定した際のエラー例

##ローカルファイルを変更したら必ずadd commit pushしてmasterにデプロイをすること。
この作業を忘れていた。


##aws_access_lkey、aws_secret_keyがないと言われる。

###原因

ローカルとEC2にあげているアプリの下記の部分をみてawsキーが書いてあるかどうか、間違ってないかみる。

- carrier_wave.rb
- .env
- credentialsファイル（アプリディレクトリでEDITOR="vim" bin/rails credentials:editで見れるやつ）

ローカルとサーバー側のファイル3つずつ、合計6つの設定をローカルに合わせる。



##yarnがないと言われる。

EC2内にyarnをインストールする。


```
$ yum -y install wget

$ wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo

$ curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -

$ yum install yarn

$ yarn --version
```

下記記事の通り。
https://twin-t.com/rails%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92aws%E3%81%B8%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC2/

##webpackerがないと言われる。

###原因
EC2内のnodeのバージョンが低い。

エラー内容

```
error @rails/webpacker@5.0.1: The engine "node" is incompatible with this module. Expected version ">=10.13.0". Got "6.17.1"
error Found incompatible module.
	1: from /Users/shogo/environment/Portfolio/vendor/bundle/ruby/2.6.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
/Users/shogo/environment/Portfolio/vendor/bundle/ruby/2.6.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as shogo@13.115.179.212: rake exit status: 1 (SSHKit::runner::ExecuteError)
rake stdout: yarn install v1.22.4
[1/4] Resolving packages...
[2/4] Fetching packages...
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
Compiling…
Compilation failed:
error Command "webpack" not found.
```

EC2内に入り、node -vをすると下記が表示された。

```
[shogo@ip-10-0-0-193 ~]$ node -v
v6.17.1
```

エラーでは10.13.0以上にしろとのこと。


下記の通りにして最新版をインストールしました。

```
$ sudo npm install n -g

$ sudo n stable

$exit

$もう一度入り直す


$node -v
v12.16.3
```

下記記事の通り。
https://loumo.jp/archives/24419



##config/database.ymlがないと言われる。

```
Caused by:
Could not load database configuration. No such file - ["config/database.yml"]
/var/www/rails/Portfolio/shared/bundle/ruby/2.6.0/gems/railties-6.0.0/lib/rails/application/configuration.rb:240:in `database_configuration'
/var/www/rails/Portfolio/shared/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/railtie.rb:39:in `block (3 levels) in <class:Railtie>'
/var/www/rails/Portfolio/shared/bundle/ruby/2.6.0/gems/rake-12.3.3/exe/rake:27:in `<top (required)>'
/home/shogo/.rbenv/versions/2.6.3/bin/bundle:23:in `load'
/home/shogo/.rbenv/versions/2.6.3/bin/bundle:23:in `<main>'
Tasks: TOP => db:migrate => db:load_config
```

###原因
ローカル、ec2の.gitignoreにdaetabase.ymlを隠す設定をしている。
.gitignoreのdatabase.ymlを隠している部分をコメントアウトし、pushしてデプロイしたら先に進んだ。


##Postgresqlの設定周りのエラー。

エラー文は後から思い出して書き足します。

###原因
本番環境にPostgreSQLを使っている場合はdeploy.rbに下記を追加する必要がある。

https://github.com/capistrano-plugins/capistrano-postgresql

```deploy.rb
~省略~
set :pg_without_sudo, false
set :pg_host, 'localhost'
set :pg_database, 'portfolio'
set :pg_username, 'postgres'
set :pg_ask_for_password, true
set :port, 22
~省略~
```


##エラー01 PG::ConnectionBad: could not translate host name "ENV['DATABASE_HOST']" to address: Name or service not knownなどの環境変数周りのエラー

```
00:52 deploy:migrating
      01 $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate
      01 /var/www/rails/Portfolio/shared/bundle/ruby/2.6.0/gems/bootstrap-4.4.1/lib/bootstrap/version.rb:4: warning: already initialized constant Bootstrap::VERSION
      01 /var/www/rails/Portfolio/shared/bundle/ruby/2.6.0/gems/bootstrap-sass-3.4.1/lib/bootstrap-sass/version.rb:2: warning: previous definition of VERSION was here
      01 /var/www/rails/Portfolio/shared/bundle/ruby/2.6.0/gems/bootstrap-4.4.1/lib/bootstrap/version.rb:5: warning: already initialized constant Bootstrap::BOOTSTRAP_SHA
      01 /var/www/rails/Portfolio/shared/bundle/ruby/2.6.0/gems/bootstrap-sass-3.4.1/lib/bootstrap-sass/version.rb:3: warning: previous definition of BOOTSTRAP_SHA was here
      01 rake aborted!
      01 PG::ConnectionBad: could not translate host name "ENV['DATABASE_HOST']" to address: Name or service not known
```
###原因
capistranoの環境変数が読み込めないことが原因。私の場合参照ファイルがec2内のアプリ/shared/config/database.ymlにあり、ここの設定が影響していた。とりあえず下手打ちで入れたところ動き、後で環境変数に格納する。

これとか、「capistrano 環境変数」でググると見つかる。
https://tech.dely.jp/entry/2019/12/16/070000

##ローカルアプリのGemfile内にもgem unicornを書いてbundle installする必要がある。
###ローカルのGemfileにgem unicornがない。

Gemfileに下記を書いてbundle installする。

```
group :production, :staging do
  gem 'unicorn'
end
```


## bootstrapがGemfile.lockによってバージョンが固定されてるからあげてくれのエラー。
###原因

ローカルファイルのgem 'bootstrap' の後ろにbootstrapのURLを記載していたのが原因。
したがってローカルのGemfile.lockと後ろについていたURLを消してbundle installで解決した。

##デプロイした後に We're sorry, but something went wrongと表示される.
###原因

不明。とりあえず下記を試して成功しました。
下記項目を1つずつ試して本環境のURLをリロードしましょう。

下記を試す。
・ec2の再起動し、もう一度デプロイ。
・ec2とgithubを繋ぐssh-keygenが正しく設定されているか確認。
・ec2に入り各種ログを確認。
・ec２に入り本番環境を起動させるコマンドを一通りうつ。


【Rails】前までEC2の本番環境が動いていたのにcapistranoでの自動デプロイを実装した後に改めて本番環境で動かすと111: Connection refusedになる際の対処法↓
https://qiita.com/shota0701nemoto/items/bbe406cfa3dc924c90d2








##他、capistranoのエラーで参考にした記事
https://qiita.com/QgqKZmHUkJv26pG/items/6f1bf5ec3e1a7c7f3b9d
https://qiita.com/yuki_uchida/items/c559862fba6f39bd6e73