ゴール
http://{IPアドレス}でrailsの画面が表示できるようにする
関連する記事
1. webページをデプロイするために、EC2インスタンスを起動する
2. Ruby on Railsの環境構築をする
3. pumaで起動してipアドレス指定でhttp通信ができるようにする
4. https://{サブドメイン}でrailsを表示できるようにする
pumaで起動する設定
puma.rbの編集
プロジェクトのソースのconfig/puma.rb
を以下のように編集する。
※pidやログの出力場所が存在しなければ、手動で作成する。
# スレッド数の設定(環境に合わせて変更)
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
threads threads_count, threads_count
# ワーカー数(CPUコア数に応じて増やす)
workers ENV.fetch("WEB_CONCURRENCY") { 2 }
# バインド設定
bind "tcp://127.0.0.1:3000"
# pidfileの保存場所
pidfile "/var/www/project_app/shared/tmp/pids/puma.pid"
state_path "/var/www/project_app/shared/tmp/pids/puma.state"
# stdout / stderr のログ出力
stdout_redirect "/var/www/project_app/shared/log/puma.stdout.log", "/var/www/project_app/shared/log/puma.stderr.log", true
# fork する場合の設定(workerモード時)
preload_app!
# アプリのディレクトリ
directory "/var/www/project_app/project_name"
# Pumaを終了したら、ワーカーも終了する
on_worker_boot do
# まずbundle install --without development testを実行
system('cd /var/www/project_app/project_name && bundle install --without development test')
# ActiveRecordの接続を確立
ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
end
puma.serviceの編集
/etc/systemd/system/puma.service
に以下を追加する
※ずっとpumaの起動がdevlopment
になってしまっていたが、ExecStartのオプションンに-e production
を追加したらできた!
※puma.serviceを変更したらrestart
の前にsudo system deamon-reload
する。
[Unit]
Description=Puma Web Server
After=network.target
[Service]
Type=simple
User=ec2-user
WorkingDirectory=/var/www/ocha_app_dir/ocha_app
ExecStart=/home/ec2-user/.rbenv/shims/bundle exec puma -e production -C /var/www/project_app/project_name/config/puma.rb
Restart=always
Environment="{環境変数名}={値}"
# ↑ここに必要な環境変数を設定する。(今回はrender.comで設定していた変数をそのままコピペした)
[Install]
WantedBy=multi-user.target
nginxの設定
conf.dの編集
rails_app.confを作成する
$ sudo nano /etc/nginx/conf.d/rails_app.conf
rails_app.confに以下を記述する
server {
listen 80;
server_name {パブリックIPアドレス};
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
環境変数の設定
前に使用していたサーバーで設定している環境変数をそのまま、/etc/environment
に記述する。
# environmentの反映
$ source /etc/environment
# 反映されているか確認
$ echo $環境変数名
エラーの対処
エラー①
application.css がアセットパイプライン(Sprockets)または app/assets/builds に存在しない
Sprockets::Rails::Helper::AssetNotFound (The asset "application.css" is not present in the asset pipeline.
対処法
# assets:precompile する
$ RAILS_ENV=production bundle exec rails assets:precompile
# pumaの再起動
$ bundle exec puma -C config/puma.rb
エラー②
productionのdatabase.yamlが間違っていた
※以前はlocalhostでdb接続していたが、今回は外部通信になるため、設定を以下に変更
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
起動手順
pumaの起動
# pumaがすでに起動している場合、killしてから
$ pkill -f puma
$ bundle exec puma -C config/puma.rb
# ターミナル変えて
$ sudo systemctl restart puma
$ sudo systemctl status puma
nginxの起動
# nginxをインストール
$ sudo yum install nginx -y
# nginxの再起動
$ sudo systemctl restart nginx
$ sudo systemctl status nginx
pumaの起動確認
$ ps aux | grep puma
ec2-user 250294 0.1 14.4 960732 61820 pts/0 Sl+ 08:29 0:02 puma 6.6.0 (tcp://0.0.0.0:3000) [ocha_app]
ec2-user 250313 0.2 27.6 1658856 118488 pts/0 Sl+ 08:29 0:05 puma: cluster worker 0: 250294 [ocha_app]
ec2-user 250318 0.2 27.3 1648488 117140 pts/0 Sl+ 08:29 0:05 puma: cluster worker 1: 250294 [ocha_app]
ec2-user 255792 0.0 0.3 222096 1452 pts/1 S+ 09:09 0:00 grep --color=auto puma