文系人間がエンジニアを目指すブログ

大学の文系学部を卒業した私が、ソフトウェアエンジニアになって、一人前を目指す過程を書くブログです。

【Rails+Unicorn+Nginx+EC2】Elastic IPでアクセスができないエラーに遭遇した話(未解決)

久しぶりのどハマり案件

久しぶりに手も足も出ない感じのエラーに遭遇。

未だ未解決ですが、良い勉強になりそうなので、途中経過を書いておこうと思いました。

やりたいこと

やりたいことはいたってシンプル。

以上。

開発環境

環境は以下の通りです。

rails (5.1.6)
ruby (2.3.1)
unicorn (5.4.1)
ec2インスタンス(t2.micro)

ここまでの実装内容

前提として、ここまでやってきた作業をまとめておきます。

  • 静的なトップページのルーティングのみ行なっている、ほぼ素の状態のRailsアプリを実装

  • AWSにて、EC2インスタンスを作成

  • Elastic IPを作成し、EC2インスタンスと紐付けた

  • EC2インスタンスに対応するセキュリティグループのインバウンドも設定完了

f:id:sas-surfer0jonny:20180821210045p:plain

  • 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
  • Amazon Linux AMIのコンソール上で、「sudo yum install nginx」のコマンドを実行。Nginxを導入

  • 以下の手順でNginx用の設定を行う

以下のコマンドを実行

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://」にアクセス!!

f:id:sas-surfer0jonny:20180821212044p:plain

何がいかんのだろう??

log等を見ながら、unicornやnginxのプロセスをkill&restartを繰り返すも、何度やってもこの忌々しい画面ばかりが表示される…

今の所の仮説

何でできないのか今の所全く分からないが、多分NginxかUnicornのどこかの設定がおかしいのだろう。

とても単純なタイポとかの可能性もあるし、もう一度ゆっくり見る必要がありそう。

まとめ

本番環境の開発は、未経験に毛が生えた程度の技術力の自分にとっては、まだまだ未開の地のようです。

こういうエラーに何度も当たる中で、力がつくと信じて頑張ろう。

追記

解決しました!!

become-a-programmer.hatenablog.com