素人がNginxとUnicornつかってRailsを動かしたいと思った。
普通Vagrantでのこのようなことはしないと思うのですが、rails s
しとけよと言われるのですが、
関係ないです。僕は勉強でVagrantの中で、Unicorn+NginxでRailsを動かせるようになっておきたいのです。
AWSへのデプロイを夢見ているのです。
Vagrantの中ではとりあえずUbuntuいれて、あとPostgreSQLもいれております。
参照:
1. 【荒すぎるメモ】PostgreSQLをVagrant,Ubuntu,Railsでつかってみる
2. VagrantでUbuntuにRails環境をつくる
さて、rails new
するところから、localhost:3005
とかでアクセスするところまでをやりたいと思います。
New
vagrant ssh
cd /vagrant
rails new study_nginx -d postgresql
cd study_nginx
Edit Gemfile
gem 'unicorn'
bundle update
bundle install
Edit database.yml
host: localhost
username: pguser
password: pguser_password
Check Webrick
bin/rake db:create
bin/rails s -b 0.0.0.0
Setting unicorn
touch config/unicorn.rb
@app_path = '/vagrant/study_nginx'
working_directory @app_path
worker_processes 2
preload_app true
timeout 30
listen "/tmp/unicorn.sock", :backlog => 64
pid "/var/www/study_nginx/shared/tmp/pids/unicorn.pid"
stderr_path "#{@app_path}/log/unicorn.stderr.log"
stdout_path "#{@app_path}/log/unicorn.stdout.log"
before_fork do |server, worker|
ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', ENV['RAILS_ROOT'])
end
before_fork do |server, worker|
if defined?(ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
end
old_pid = "#{server.config[:pid]}.oldbin"
if File.exists?(old_pid) && server.pid != old_pid
begin
Process.kill("QUIT", File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
end
end
end
after_fork do |server, worker|
if defined?(ActiveRecord::Base)
ActiveRecord::Base.establish_connection
end
end
Start & kill unicorn
sudo mkdir -p /var/www/study_nginx/shared/tmp/pids
sudo chmod 777 /var/www/study_nginx/shared/tmp/pids
bundle exec unicorn_rails -c config/unicorn.rb -p 8080 -D
ps aux | grep unicorn
kill -9 {pid}
Setting nginx
touch /etc/nginx/conf.d/study_nginx.conf
upstream unicorn_server {
server unix:/tmp/unicorn.sock
fail_timeout=0;
}
server {
listen 80;
client_max_body_size 4G;
server_name localhost;
keepalive_timeout 5;
# Location of our static files
root /vagrant/study_nginx/public;
location ~ ^/assets/ {
root /vagrant/study_nginx/shared/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 /vagrant/study_nginx/public;
}
}
Start nginx
sudo /etc/init.d/nginx start
以上です。
ファイル名「study_nginx.conf」とかはなんでも良いのですが、なんで何でも大丈夫かというと、
/etc/nginx/nginx.conf
に
include /etc/nginx/conf.d/*.conf;
という記述があるからなんですね!
ちなみに、調子こいてファイル2つおいとくとsudo /etc/init.d/nginx start
しても死ぬので気をつけてください。
ちなみに、死んだ場合はログファイルを見ましょう。
cd /var/log/nginx/
ここにいますから。
Author And Source
この問題について(素人がNginxとUnicornつかってRailsを動かしたいと思った。), 我々は、より多くの情報をここで見つけました https://qiita.com/mochizukikotaro/items/42021843f0efe8715b99著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .