Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用Nginx、Passenger和Sinatra创建多个位置_Ruby_Nginx_Sinatra_Passenger_Rack - Fatal编程技术网

Ruby 如何使用Nginx、Passenger和Sinatra创建多个位置

Ruby 如何使用Nginx、Passenger和Sinatra创建多个位置,ruby,nginx,sinatra,passenger,rack,Ruby,Nginx,Sinatra,Passenger,Rack,我有一个服务器部分,看起来像: server { listen 80; server_name arch; root /data/apps/production/fentonGem2/current/public; passenger_enabled on; } 这很好用。但是,我想将两个或多个应用程序部署到相同的服务器\u名称和侦听端口。因此,我大概会使用如下内容: server { listen 80; serv

我有一个服务器部分,看起来像:

server {
    listen       80;
    server_name  arch;
    root   /data/apps/production/fentonGem2/current/public;
    passenger_enabled on;
}
这很好用。但是,我想将两个或多个应用程序部署到相同的
服务器\u名称
侦听
端口。因此,我大概会使用如下内容:

server {
    listen       80;
    server_name  arch;
    location /app1 {
         root   /data/apps/production/fentonGem2/current/public;
         passenger_enabled on;
    }
    location /app2 {
         root   /data/apps/production/fentonGem3/current/public;
         passenger_enabled on
    }
} 
...
server {
    listen       80;
    server_name  arch;
    location ^~ /app1 {
        root /data/apps/production/fentonGem2/current;
        rails_env production;
        passenger_enabled on;
        passenger_base_uri /app1;
    }
    location ^~ /app2 {
        root /data/apps/production/fentonGem2/current;
        rails_env production;
        passenger_enabled on;
        passenger_base_uri /app2;
    }
} 
...
但这不起作用。有人知道我如何部署两个独立的应用程序,并通过以下方式访问它们:

http://domain.com/app1/
以及:

该设置使用Nginx、Phusion Passenger、Rack和Sinatra


更新:

谢谢你的回复,但是我发现它们和方法都没有帮助,尽管我可能不太理解。似乎我必须在另一个应用程序中部署一个应用程序,这看起来非常不干净。我最后采用的方法是使用单独的
服务器
部分,然后更新我的
/etc/hosts
文件,使其具有相同IP地址的服务器别名。所以现在我有:

http://app1/
以及:

和服务器部分,看起来像:

server {
    listen       80;
    server_name  app1;
    root /data/apps/production/app1/current/public;        
    passenger_enabled on;        
}               
server {
    listen 80;
    server_name app2;
    root /data/apps/production/app2/current/public;
    passenger_enabled on;
}
和在/etc/hosts中:

192.168.1.30     app1 app2

不确定,但您可能需要
passenger\u base\u uri/app1

关于乘客和Nginx配置的更多信息:

编辑:

“允许多次指定此选项。执行此操作可在同一虚拟主机下的不同子URI中部署多个应用程序。”

以下方面发挥了作用:

  • 首先创建名为
    app1
    app2
    的符号链接,指向“public”目录,如下所示:

    ln -s /data/apps/production/fentonGem2/current/public /data/apps/production/fentonGem2/current/app1
    ln -s /data/apps/production/fentonGem2/current/public /data/apps/production/fentonGem2/current/app2
    
  • 修改nginx.conf使其具有
    rails\u base\u uri
    ,其外观如下所示:

    server {
        listen       80;
        server_name  arch;
        location /app1 {
             root   /data/apps/production/fentonGem2/current/public;
             passenger_enabled on;
        }
        location /app2 {
             root   /data/apps/production/fentonGem3/current/public;
             passenger_enabled on
        }
    } 
    
    ...
    server {
        listen       80;
        server_name  arch;
        location ^~ /app1 {
            root /data/apps/production/fentonGem2/current;
            rails_env production;
            passenger_enabled on;
            passenger_base_uri /app1;
        }
        location ^~ /app2 {
            root /data/apps/production/fentonGem2/current;
            rails_env production;
            passenger_enabled on;
            passenger_base_uri /app2;
        }
    } 
    ...
    
  • 希望这有帮助