Setup Rails on unicorn on nginx on AWS EC2 linux
How to install Unicorn
1.Modify Gemfile contents
$ sudo vim ~/(sampleapp)/Gemfile
Add gem 'unicorn'
2. Install unicorn at the Gemfile's directory
$ bundle install
3. Check installation of unicorn
$ bundle show unicorn
/home/ec2-user/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/unicorn-5.3.0
4. Make "unicorn.rb" on /(sampleAppDirectory)/config and write following contents
unicorn.rb
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true
listen '/home/ec2-user/testApp/tmp/unicorn.sock' #{Railsアプリケーションのあるディレクトリ}/tmp/unicorn.sock
pid '/home/ec2-user/testApp/tmp/unicorn.pid' #{Railsアプリケーションのあるディレクトリ}/tmp/unicorn.pid
before_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
5. Execute following code and create rake file at your app directory
$ rails g task unicorn
Running via Spring preloader in process 13140
create lib/tasks/unicorn.rake
6. Start unicorn and check unicorn starting
$ bundle exec unicorn_rails -c config/unicorn.rb
*↑production環境かdeployment環境は選べる。Unicorn commands一覧参照
$ ps -ef | grep unicorn
ec2-user 12631 11576 0 08:09 pts/1 00:00:00 vim unicorn.rb
ec2-user 13547 13151 0 08:37 pts/5 00:00:01 unicorn master -c config/unicorn.rb
ec2-user 13582 13547 0 08:37 pts/5 00:00:00 unicorn worker[0] -c config/unicorn.rb
ec2-user 13584 13547 0 08:37 pts/5 00:00:00 unicorn worker[1] -c config/unicorn.rb
ec2-user 13587 13547 0 08:37 pts/5 00:00:00 unicorn worker[2] -c config/unicorn.rb
ec2-user 14665 13960 0 08:51 pts/3 00:00:00 grep --color=auto unicorn
Modify the setting of Nginx
1. Modify nginx.conf to rails.cof
nginx/1.10.2時点ではnginx.conf($ nginx -t
でconfigファイルを確認できる)。nginx.confに以下のように書き換える。
nginx.conf
# For mor# e information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user ec2-user;
worker_processes 1;
events {
worker_connections 1024;
}
http {
# log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# access_log /home/ec2-user/testApp/access.log main;
# sendfile on;
# tcp_nopush on;
# tcp_nodelay on;
# keepalive_timeout 65;
# types_hash_max_size 2048;
# include /etc/nginx/mime.types;
# default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
# include /etc/nginx/conf.d/*.conf;
# index index.html index.htm;
upstream unicorn {
server unix:/home/ec2-user/testApp/tmp/unicorn.sock; #/home/{ユーザ名}/{Railsアプリケーション>名}/tmp/unicorn.sock
}
server {
listen xx; #HTTP = 80
server_name xxx.xxx.xxx.xxx; #Your server ip-address or domain name
access_log /var/log/access.log;
error_log /var/log/error.log;
root /home/ec2-user/testApp/public; #/home/{ユーザ名}/{Railsアプリケーション名}/public
# index index.html;
client_max_body_size 4G; #100m;
error_page 404 /404.html;
error_page 500 502 503 504 /500.html;
try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://unicorn;
}
}
2. Reload nginx
$ sudo service nginx restart
3. Access your server address!!!
ここからはunicornのnginxに対するpermission deniedが出た時の処理
2017/04/23 06:45:40 [crit] 29912#0: *1 open()
"/var/lib/nginx/tmp/proxy/1/00/0000000001" failed (13: Permission
denied) while reading upstream, client: (clientserver), server:
(my-server), request: "GET / HTTP/1.1", upstream:
"http://unix:/pathTo/tmp/unicorn.sock:/", host:
"(my-server)"
上記エラーではnginx, tmpにおけるアクセス権限がnginxのみしかないので、アクセス権を解放する(下記アクセスは777としているが修正する必要あり)
$ sudo chmod 777 nginx
$ sudo chmod 777 tmp
Author And Source
この問題について(Setup Rails on unicorn on nginx on AWS EC2 linux), 我々は、より多くの情報をここで見つけました https://qiita.com/orihomotakanat/items/846f4109978df2c2ed0b著者帰属:元の著者の情報は、元の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 .