アプリをRails で開発して1ヶ月経ち、デプロイして本番環境でどんなふうに動くのかを確かめている時に、フォントが適用されず半日くらい潰れてしまったので備忘録として書きます。
使用している技術はRuby,Rails, EC2, Nginx,Puma
WebサーバーにNginx アプリケーションサーバーにPuma
Capistranoを使ってデプロイしている。(まだ使い始めてから1日なので、理解が浅いが簡単にデプロイできて感動している)
$ rails -v
Rails 5.2.3
$ ruby -v
ruby 2.5.7
クロームのブラウザで検証を見ると、/assets/soft.ttfがnot foundと言っていた。
フォントファイルが見つからないと
ターミナルでログを確認
$ sudo tail -f /var/log/nginx/access.log
すると
"GET /assets/soft.ttf HTTP/1.1" 404 555
こちらも見つからないというログがあった。
ローカル環境ではapp/assets/fontsの中にsoft.ttfを入れていたのだが
本番環境だとassetsの下のjavascripts,images,stylesheetsしか読みに行ってくれないみたい(現時点ではこの認識)
なのでEC2上でcpコマンドでローカルのfontsディレクトリの中のfontファイルをEC2にコピーしてくれば良いと考え
ターミナルでEC2にログインして
$ ssh -i ~/.ssh/〜〜〜〜ここにはAWSの鍵とユーザー名とIPアドレス〜〜〜
自分のアプリにいき
$ cp app/assets/fonts/* public/assets
本番環境ではpublicの下にassetsになる
assets下にコピーして持ってきた。
それを確認
$ ls public/assets
soft-190a1a8da7a6e1b55869608ae297bbfa9f25f921ef63f86646eef087e47530eb.ttf
soft-190a1a8da7a6e1b55869608ae297bbfa9f25f921ef63f86646eef087e47530eb.ttf.gz
soft.ttf
コピーされている。
これでブラウザをリロードするとまだ見つからないとエラー
その原因はCapistranoを使ってデプロイしているので自分のアプリの直下にあるcurrrentにコピーしてこないといけなかった
ターミナルで自分のアプリ内で
$ sudo vi /etc/nginx/conf.d/アプリ名.conf
と入力すると
下の方に
location ^~ /assets/ {
省略
/、、、/.../.../アプリ名/current/public;
}
assetsの下はアプリ名/current/publicになっている
Capistranoを使うとgithubに上がっているアプリを日付のついたフォルダにしまって、それにcurrentと名前をつけて常に最新版をデプロイするようにしてくれている?らしい。この辺りはまだ理解できていない
ターミナルで
$ ls -al
入力すると
06:24 current -> /〇〇/〇〇/〇〇/releases/20200513062433
こんな感じのが見れる
$ ls -alt
すると
06:24 20200513062433
05:09 20200513050925
01:44 20200513014420
12:48 20200512124820
12:42 20200512124154
デプロイした回数だけ出てきた
結局のところ
EC2で自分のアプリから
$ cd current
$ cp app/assets/fonts/* public/assets
このようにすることで問題が解決した。