【Rails+Unicorn+Nginx+EC2】Elastic IPでアクセスができないエラーに遭遇した話(未解決)
久しぶりのどハマり案件
久しぶりに手も足も出ない感じのエラーに遭遇。
未だ未解決ですが、良い勉強になりそうなので、途中経過を書いておこうと思いました。
やりたいこと
やりたいことはいたってシンプル。
- ほぼ素のRailsアプリをAWSのEC2インスタンスに乗ってけてデプロイしたい。
- その際に、Unicorn、Nginxを使用し、最終的にはCapistranoの導入まで行いたい。
以上。
開発環境
環境は以下の通りです。
rails (5.1.6) ruby (2.3.1) unicorn (5.4.1) ec2インスタンス(t2.micro)
ここまでの実装内容
前提として、ここまでやってきた作業をまとめておきます。
静的なトップページのルーティングのみ行なっている、ほぼ素の状態のRailsアプリを実装
Elastic IPを作成し、EC2インスタンスと紐付けた
EC2インスタンスに対応するセキュリティグループのインバウンドも設定完了
- Unicornの設定を行い、ElasticIP+:3000でページが表示されるようになった。
config/unicorn
app_path = File.expand_path('../../', __FILE__) worker_processes 1 working_directory app_path pid "#{app_path}/tmp/pids/unicorn.pid" stderr_path "#{app_path}/log/unicorn.stderr.log" stdout_path "#{app_path}/log/unicorn.stdout.log" listen 3000 timeout 60 preload_app true GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true check_client_connection false run_once = true before_fork do |server, worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect! if run_once run_once = false # prevent from firing again end old_pid = "#{server.config[:pid]}.oldbin" if File.exist?(old_pid) && server.pid != old_pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH => e logger.error e end end end after_fork do |_server, _worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection end
以下のコマンドを実行
sudo vim /etc/nginx/conf.d/rails.conf
rails.confを以下のように編集
upstream app_server { server unix:/tmp/sockets/unicorn.sock; } server { listen 80; server_name <Elastic IP>; root /var/www/<アプリケーション名>/public; location ^~ /assets/ { gzip_static on; expires max; add_header Cache-Control public; root /var/www/<アプリケーション名>/public; } try_files $uri/index.html $uri @unicorn; location @unicorn { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server; } error_page 500 502 503 504 /500.html; }
- Nginxをリスタート
sudo service nginx restart
エラー状況
ここまでやったら、ElasticIPでアクセスできるはず…!!
「https://
何がいかんのだろう??
log等を見ながら、unicornやnginxのプロセスをkill&restartを繰り返すも、何度やってもこの忌々しい画面ばかりが表示される…
今の所の仮説
何でできないのか今の所全く分からないが、多分NginxかUnicornのどこかの設定がおかしいのだろう。
とても単純なタイポとかの可能性もあるし、もう一度ゆっくり見る必要がありそう。
まとめ
本番環境の開発は、未経験に毛が生えた程度の技術力の自分にとっては、まだまだ未開の地のようです。
こういうエラーに何度も当たる中で、力がつくと信じて頑張ろう。
追記
解決しました!!