使用不同的ENV变量为同一个Rails应用程序提供服务

时间:2018-10-11 10:37:03

标签: ruby-on-rails nginx passenger

我试图在不同的端口(即。

)上为同一Rails应用程序提供不同的ENV变量。
  • 端口443的BRAND_SPACE设置为“默认”
  • 端口444的BRAND_SPACE设置为“ somethingelse”

这个特定的ENV变量会影响应用程序的样式(认为多租户),我希望能够使用这两种样式检查同一应用程序。

我使用nginx + Passenger进行了以下设置(为便于阅读而缩短):

http {
    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
    passenger_ruby /usr/bin/ruby;
    passenger_max_pool_size 8;
    passenger_max_instances_per_app 4;
    passenger_max_requests 500;
    passenger_show_version_in_header off;

    server {
        listen 443;
        server_name staging.example.de;
        root /apps/staging/example/current/public;
        passenger_enabled on;
        rails_env staging;
        passenger_env_var BRAND_SPACE default;
    }

    server {
        listen 444;
        server_name staging.example.de;
        root /apps/staging/example/current/public;
        passenger_enabled on;
        rails_env staging;
        passenger_env_var BRAND_SPACE somethingelse;
    }
}

现在发生的情况是,两个应用程序都使用了重启后首先请求的应用程序的ENV变量,即,如果您首先在443上请求该应用程序,则还将为该应用程序设置ENV变量“默认” 444上的应用程序。

我使用的配置错误吗?还是应该以其他方式解决?如果是这样,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题再次出现,我终于找到了答案:

https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_group_name

设置此变量将允许您在两个不同的域或服务器块下以相同的根服务于相同的应用程序。