我想用NGINX部署一个简单的Ruby Rack服务。我在网上看了各种各样的东西,但没有一个是足够有帮助的。假设我有这样的代码(实际上它有点复杂,但仍然不超过200行代码服务):
require 'rack'
class HelloWorld
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
end
end
Rack::Handler::Mongrel.run HelloWorld, Port: 9292我想知道用NGINX部署它的最好方法是什么。也许是FCGI或者其他什么?
发布于 2012-10-23 21:29:15
下面是针对unicorn/thin解决方案的基本nginx配置:
upstream rack_upstream {
server 127.0.0.1:9292;
}
server {
listen 80;
server_name domain.tld;
charset UTF-8;
location / {
proxy_pass http://rack_upstream;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* ^.+\.(jpg|jpeg|gif|png|css|js)$ {
root /path/to/static/files;
}
}如果您以root身份运行nginx,则可以在端口80上为您的站点提供服务。
否则,将listen 80更改为listen SOME-AVAILABLE-PORT
用您的站点名称替换domain.tld
您还可以在nginx正则表达式中添加要由(jpg|jpeg|gif|png|css|js)提供服务的文件的扩展名,并使用|对其进行分隔
有关更多信息,请访问:
http://wiki.nginx.org/DirectiveIndex
http://wiki.nginx.org/ServerBlockExample
http://wiki.nginx.org/FullExample
发布于 2012-10-23 20:17:49
最简单的可能是passenger,它允许nginx提供任何基于机架的应用程序。它很容易安装,但由于nginx没有可加载的模块,您必须从源代码安装nginx (安装程序会为您处理所有这些)。
另一种流行的方式是让nginx代理到unicorn。Unicorn是一个ruby app服务器,可以托管任何机架应用程序。通常,您让nginx处理静态资产,并将其余资产发送给unicorn。与thin、mongrel等相比,独角兽有一些很好的特性,例如,它可以处理开箱即用的无缝重启。
发布于 2015-01-10 07:35:39
在使用预编译的乘客二进制文件(for Debian/Ubuntu)时,部署nginx+passenger非常容易。项目的目录结构如下,这一点很重要:
/var/www/my_app:
\-- public/ <- public root of webserver
\-- config.ru <- that's where you place hello world
\-- tmp
\-- restart.txtnginx配置(可能在/etc/nginx/sites-available/my_site中):
server {
listen 80;
server_name example.com;
root /var/www/my_app/public;
passenger_enabled on;
passenger_ruby /usr/bin/ruby;
}当您想要重新启动应用程序时,只需运行
touch /var/www/my_app/tmp/restart.txt要在Debian上启用您的站点,请创建symlik
ln -s /etc/nginx/sites-available/my_site /etc/nginx/sites-enabled/my_site并重新加载nginx /etc/init.d/nginx reload
https://stackoverflow.com/questions/13030149
复制相似问题