使用Unicorn将Sinatra应用部署到Nginx
2016-08-01 本文已影响0人
Frederich
Sinatra 是我很喜欢的 web 开发框架,相比与 Rails ,它更轻量级,同时给我更多的控制而不是一大堆的 convention 。Sinatra的应用框架可以参考我的boilerplate:https://github.com/frederichchen/fc_sinatra_boilerplate
在平时开发的时候我用Thin来做服务器,部署的时候则使用效率更高的unicorn,因此需要首先: gem install unicorn
部署的时候需要先进入Sinatra应用的根目录,在其中分别建立 tmp、tmp/sockets、tmp/pids和log 四个目录。
然后在Sinatra应用的根目录中新建一个unicorn.rb文件,内容为:
@dir = "/path/to/app/"
worker_processes 2
working_directory @dir
timeout 60
listen "#{@dir}tmp/sockets/unicorn.sock", :backlog => 64
pid "#{@dir}tmp/pids/unicorn.pid"
stderr_path "#{@dir}log/unicorn.stderr.log"
stdout_path "#{@dir}log/unicorn.stdout.log"
接下来配置Nginx,编辑其配置文件 nginx.conf ,在http部分加入如下内容:
http {
...
upstream unicorn_server {
server unix:/path/to/app/tmp/sockets/unicorn.sock
fail_timeout=0;
}
server {
listen 80;
server_name localhost;
root /path/to/app/public;
location / {
try_files $uri @app;
}
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
# pass to the upstream unicorn server mentioned above
proxy_pass http://unicorn_server;
}
}
}
启动服务的时候先运行: unicorn -c path/to/unicorn.rb -E development -D ,其中-E指定环境为development,-D表示以daemon运行。然后启动nginx服务,访问 http://localhost/ 就可以了。
要停止服务,则运行 cat /path/to/app/tmp/pids/unicorn.pid | xargs kill -QUIT 即可。
如果unicorn没有能够清理干净,则还需要执行以下两个命令:
rm /path/to/app/tmp/sockets/unicorn.socket
rm /path/to/app/tmp/pids/unicorn.pid