首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用NGINX部署Ruby Rack应用

如何使用NGINX部署Ruby Rack应用
EN

Stack Overflow用户
提问于 2012-10-23 20:11:38
回答 3查看 6.7K关注 0票数 12

我想用NGINX部署一个简单的Ruby Rack服务。我在网上看了各种各样的东西,但没有一个是足够有帮助的。假设我有这样的代码(实际上它有点复杂,但仍然不超过200行代码服务):

代码语言:javascript
复制
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或者其他什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-23 21:29:15

下面是针对unicorn/thin解决方案的基本nginx配置:

代码语言:javascript
复制
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

票数 15
EN

Stack Overflow用户

发布于 2012-10-23 20:17:49

最简单的可能是passenger,它允许nginx提供任何基于机架的应用程序。它很容易安装,但由于nginx没有可加载的模块,您必须从源代码安装nginx (安装程序会为您处理所有这些)。

另一种流行的方式是让nginx代理到unicorn。Unicorn是一个ruby app服务器,可以托管任何机架应用程序。通常,您让nginx处理静态资产,并将其余资产发送给unicorn。与thin、mongrel等相比,独角兽有一些很好的特性,例如,它可以处理开箱即用的无缝重启。

票数 9
EN

Stack Overflow用户

发布于 2015-01-10 07:35:39

在使用预编译的乘客二进制文件(for Debian/Ubuntu)时,部署nginx+passenger非常容易。项目的目录结构如下,这一点很重要:

代码语言:javascript
复制
/var/www/my_app:
    \-- public/   <- public root of webserver
    \-- config.ru <- that's where you place hello world
    \-- tmp
        \-- restart.txt

nginx配置(可能在/etc/nginx/sites-available/my_site中):

代码语言:javascript
复制
server {
  listen 80;
  server_name example.com;
  root /var/www/my_app/public;

  passenger_enabled on;
  passenger_ruby /usr/bin/ruby;    
}

当您想要重新启动应用程序时,只需运行

代码语言:javascript
复制
touch /var/www/my_app/tmp/restart.txt

要在Debian上启用您的站点,请创建symlik

代码语言:javascript
复制
ln -s /etc/nginx/sites-available/my_site /etc/nginx/sites-enabled/my_site

并重新加载nginx /etc/init.d/nginx reload

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13030149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档