したいこと。
nginxとunicornとec2でRailsアプリをデプロイしたい。
参考したQiita
[user](/var/www/projects/***) $ sudo cat /etc/nginx/conf.d/***.conf
upstream unicorn_server { server unix:/var/www/projects/***/tmp/sockets/.unicorn.sock fail_timeout=0; } server { listen 80; client_max_body_size 4G; server_name 54.65.226.96; keepalive_timeout 5; # Location of our static files root /var/www/projects/***/public; location ~ ^/assets/ { root /var/www/projects/***/public; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://unicorn_server; break; } } error_page 500 502 503 504 /500.html; location = /500.html { root /var/www/projects/***/public; } }
[user](/var/www/projects/***) $ cat config/unicorn.conf.rb
# set lets $worker = 2 $timeout = 30 $app_dir = "/var/www/projects/***" $listen = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir $pid = File.expand_path 'tmp/pids/unicorn.pid', $app_dir $std_log = File.expand_path 'log/unicorn.log', $app_dir # set config worker_processes $worker working_directory $app_dir stderr_path $std_log stdout_path $std_log timeout $timeout listen $listen pid $pid # loading booster preload_app true # before starting processes before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin Process.kill "QUIT", File.read(old_pid).to_i rescue Errno::ENOENT, Errno::ESRCH end end end # after finishing processes after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end
Qiitaの記事はELBやらRDSやらてんこ盛りですが、質問者さんがどこを採用してどこは省略したのか、これだけでは判断しかねます。フル装備で実装したということでしょうか?
nginx.confは見せてもらえますか?
hotta様
お返事ありがとうございます。
初心者向け:AWS(EC2)にRailsのWebアプリをデプロイする方法 ①から⑥まであり、DNSやドメインを除く、⑤まで行っています。従いまして、ELB/RDSは設定しました!
momf様 お返事ありがとうございます。nginx.confとnginx.conf.defaultを念のため両方掲載しました。
とりあえず.unicorn.sockが見つからないと書かれてるのでディレクトリにちゃんとあるか確認できますか?
momf様、ありがとうございます。$ ls -a /var/www/projects/offisee(※アプリ名)/tmp/sockets/を行うと、.unicorn.sockの表示が確認されました。この確認方法で間違いはないでしょうか。
厳しいですかね...。
失礼ながら、AWSを使わないローカル構成であれば、すんなりと構築できるくらいの経験はおありなんでしょうか。
(おそらく)経験はありません。全くインフラの書籍等を眺めてない訳ではありませんが、Railsアプリの開発自体がやっとの思いで完成したので、今まではHerokuに実験環境?としてデプロイを試験的に行っていたものを、本番環境としてAWSにアップロードして実際に運用をしたいと考えていた次第です。
であれば、まずは(ELB/RDSとかなしで)EC2だけでやってみるとかではいかがでしょう。現状は構成が複雑すぎて、切り分けが大変そうです。
(デプロイ編②)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで(http://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1)で行った経験はあって、そのくらいなら慣れているのですが。質問の内容では、原因がなかなか特定・断定できない感じですか。
若干進んだ(?)結果、エラー内容が変わったので、新しい質問を用意しました。
https://teratail.com/questions/87759
もしご助力頂けるかた、いらっしゃればよろしくお願いします...。難しいです。
$ ps -ef | grep unicorn | grep -v grep の結果をこちらにも追記してください(手動編集なしで)。
お返事本当にありがとうございます。追伸に掲載させていただきました。
ユーザ名を隠されるとパーミッションの問題の解析ができなくなりますので「手動編集なしで」って書いてます。見せるとまずいようなら、面倒でもテスト用のユーザ名で構築するべきです。
申し訳ございません。変更をしました!
unicorn を起動した際のユーザ名は、このユーザですか?
はい!資料では、途中でec2-userではログインできないようにしていまして、
必ず、このユーザ名で、ログインをして、作業を行っています。
起動時は以下のコマンドを利用しています。
$ bundle exec unicorn_rails -c /var/www/projects/offisee/config/unicorn.conf.rb -D -E production
このユーザは、$app_dir 配下のすべてのディレクトリに対する書き込み権を持っていますか?
文字数の関係上画像で追伸をしました。いかがでしょうか。おそらくあるのではないかと思うのですが...。
次は、nginx ユーザはソケットファイルに対して書き込み権(および、そのファイルにたどり着くまでの通過権)を持っていますか?
あと、解析が困難になるので、まずはクライアント(nginx)とサーバ(unicorn)が同じホストで動いていることを保証してからテストしたほうがいいと思います(nginx や unicorn の設定ファイル内の IP アドレスを 127.0.0.1 にする)。
nginxソケットファイルの書き込み権、通過権いかがでしょうか。
わかりました!本当に助かっています!
127.0.0.1にしてみます。その後、127.0.0.1にアクセスをして見たほうがいいということでしょうか。
そうですね。そのホスト上で、curl/w3m 等を使ってテストすればいいと思います。設定変更後、サービスの再起動を忘れないように。
力足らずでcurl/w3mが分からないのですが、IPアドレスを変え、127.0.0.1にブラウザ上からアクセスをしたらItworksという画面になりました。(追伸4です。)
w3m http://localhost でアクセスできますよ。入ってなければ sudo yum install w3m。
ありがとうございます!!勉強して精進します。yum installで、w3mを導入しました。 http://localhost にアクセスすると、追伸4と同じ画面になりました。もしかしてRailsアプリのトップ画面になるべきなのでしょうか。
正直、私は Unicorn も Rails もわかりません。ただ、Unix/Linux 的なトラブルシュートをしただけです。あとは Rails な方に聞いてください。
ありがとうございました!!
回答3件
あなたの回答
tips
プレビュー
