初心者プログラマのひとり勉強部屋

若葉マークのプログラマー☺️

【初めてのデプロイ】エラー頻出!

こんにちは!

さてさて、昨日は一日デプロイ作業をしていたのですが、エラー出すぎて進まない進まない、、特にCapistranoを使った自動デプロイ・・

デプロイでのエラー箇所を備忘録。

 

使用材料

Unicorn

・Nnginx

Capistrano

Githubデクストップ

railsアプリケーション(スクールのカリキュラムで作成) 

 

エラー内容

・手動デプロイでは普通にデプロイできたのに、Nginx導入して”We're sorry, but something went wrong.”と言われた!

→これこの後もたくさん出てきた。今回はNginx導入・設定した後にインスタンスの再起動していなかったのが原因。AWSからインスタンス再起動。UnicornMySQL・Nginx再起動

 

Railsにはアクセスできたがアプリケーションでユーザ登録しようするとまた”We're sorry, but something went wrong.”

→$cd ”アプリ名”/log/production.logで確認

"

Mysql2::Error: Table '作ったテーブル名' doesn't exist: SHOW FULL FIELDS FROM `作ったカラム名`):

"

MySQLエラー。どうやらDB登録でダメみたい

$rails db:migrate RAILS_ENV=production

でマイグレートしてみるとrails aborted!

中間テーブルがうまく作成されてない。(ローカル環境で何度も修正したりしてやり直したところ)そういえば型変更したりして、マイグレートファイルから読み込むだけじゃうまくいかないはずだった。

→ローカルで

$rake db:drop

マイグレーションファイル編集

$rake db:migrate

→サーバ上で

$rake db:migrate RAILS_ENV=production

 

・ローカルの変更をサーバに反映しようとしてgit pull origin master打つとエラー

error: Your local changes to the following files would be overwritten by merge:

Gemfile.lock

Please commit your changes or stash them before you merge. Aborting

gemfile.lockがローカルと違いますよエラー

おぉ、さっきいらないから消したよ、、確かにstashファイルにあったけどね、使わないからね。。という言い訳(ファイル消去は慎重に!)

Githubデスクトップでプッシュされてないコミット探し出し、マスターの状態でbuckup取った上でそれっぽいものを全部プッシュ

(まだマージされてないブランチ探すには$git branch --no-merged

→ファイルが幸いなことにgemfile.lockだったため、ローカルのgemfile.lock削除、bundle installで解決(ローカルとサーバで同じ状態になればいいらしい)

 

・ローカルから自動デプロイすると

(SSHKit::Runner::ExecuteError)

unicornログ確認(サーバ)

$アプリケーション/current/log/unicorn.stderr.log

argumenterror ローカルで設定したSSH鍵などの項目が反映されていなかった様子。

インスタンス再起動・Nginx・MySQL再起動後時間をおくと自動デプロイコマンドが動いた

 

自動デプロイとは関係ないエラー

(ローカル)Git secretを導入しようとすると

$brew install git-secrets

Error: Permission denied @ utime_internal - /Users/○○/Library/Caches/Homebrew/.cleaned

権限ないエラー

→下記を参考にさせていただきました。

https://qiita.com/cutenkey/items/2505710b4c494bac152b

 

経過

他にもエラーでつまるつまる。

上記手順をスクールの方に手伝っていただきながら解決できたわけだけど、自力で解決できるようにならなければ。。

自分の作ったアプリケーションを公開するというだけでも、とてつもなく作業がいるんだなあと実感。しかも一般に公開されるわけだから、セキュリティの面も踏まえてここは慎重に手順も内容も覚えておかないとですね。

 

メモ

 Capistranoについてまだ理解が曖昧。実際にどのタスクを自動でやってくれているのか。unicorn起動、サーバに接続くらいしかわかってない。ログ追えばわかるだろうからまとめる。(次の機会に・・)