環境
macOS: Big Sur Ver11.2.3
Rails: 6.1.1
Ruby: 2.6.5
インフラ:AWS(EC2)
Webサーバ:Unicorn
困っていること
AWSのEC2を使ってポートフォリオをデプロイし、さらにACMで証明書取得, Route53でドメイン取得後、SSL化まで行ったところ、Googleマップが表示されなくなった。
ブラウザのコンソールを確認すると「Google Maps JavaScript API error: InvalidKeyMapError」と表示されている。
したがって、APIキーをEC2上で設定できていないのではと推測。
解決方法
①EC2にSSHで接続し、Vimを開く
% cd .ssh
% SSH接続のコマンド(ssh -i hoge.pem ec2-user@アプリのIPアドレス)
接続後、
[ec2-user@ip-172-31-0-160 ~]$ sudo vim /etc/environment
②環境変数を記述する
内容を変更するには「i」を押して編集モードにする。
変更し終わったら「esc」を押して編集モードを終了してから「:wq」で保存して終了すること。
export GOOGLE_MAPS_API_KEY='APIキーを貼り付け'
③設定できたか確認
一度EC2から抜けます。
[ec2-user@ip-172-31-0-160 ~]$ exit
ログアウトしたらもう一度EC2にログインし、以下のコマンドを実行
[ec2-user@ip-172-31-0-160 ~]$ env | grep 環境変数の名前
これで設定した環境変数が表示されればきちんと設定できています。
④Webサーバを一度ストップさせ、再起動させる
一度EC2を抜けて、ローカルのターミナル上でアプリケーションのフォルダに移動します。
以下のコマンドを実行し、Unicornをストップさせる。
% bundle exec cap -t production unicorn:stop
次に、もう一度EC2にSSH接続してログインし、アプリのフォルダに移動します。
Unicornの起動状況を確認するとmasterプロセスなどが起動されていないと思います。
[ec2-user@ip-172-31-0-160 take_out_app]$ ps aux | grep unicorn
ec2-user 16164 0.0 0.0 119436 916 pts/0 S+ 03:05 0:00 grep --color=auto unicorn
ここまで確認できたら、Unicornを再起動しましょう!
[ec2-user@ip-172-31-0-160 take_out_app]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
→特に何も表示はされませんが成功しています。
もう一度プロセスを確認!
masterとworkerという名前のプロセスが実行され、再起動できているのがわかります。
[ec2-user@ip-172-31-0-160 take_out_app]$ ps aux | grep unicorn
ec2-user 16196 1.0 12.6 486816 127348 ? Sl 03:08 0:01 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 16204 0.3 12.3 488336 123972 ? Sl 03:08 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 16216 0.0 0.0 119436 948 pts/0 S+ 03:10 0:00 grep --color=auto unicorn
これでブラウザでアプリケーションにアクセスしてみると、無事にGoogleマップが表示されていました!
おまけ(Vimから抜けるコマンドまとめ)
① :w → 作成・編集したファイルを保存
② :q → vimをそのまま終了
③ :q! → 編集した内容を保存しないでvimを終了
④ :wq → 編集した内容を保存してvimを強制終了