ruby-on-rails – 如何使用不同的rails_env与nginx,passenger和redmine

我需要让redmineNginx,phusion乘客和 mysql一起运行.由于该项目需要多个redmine实例,应该使用不同的rails_env来实现,我尝试使用Nginx在不同的服务器vhosts中设置它们.

一个vhost的示例:

server {
    listen xxxx;
    server_name redmine.xxxxx;
    root /xxxxx/redmine/public;
    passenger_enabled on;
    rails_env production;
}

其他服务器vhost也是如此,但server_name与其他域匹配,rails_env设置为internal.

问题是,Nginx只为两个redmine实例使用了两个rails_env,而不是每个实例都有一个.任何建议如何使用不同的rails_env与相同的应用程序,Nginx和phusion乘客?

谢谢

解决方法

我想你遇到了同样的问题.您希望使用相同的物理目录来托管应用程序实例,但是您希望通过使用不同的DNS条目(redmine.development / redmine.production)在不同的环境(开发/生产)下与应用程序进行交互.

问题是乘客将传入的请求识别为使用root上方目录中的rails app.如果您在多个Nginx配置中对root使用相同的文字引用,则乘客会将请求转发到root中找到的单个运行实例.即,如果您首先启动开发应用程序,然后尝试通过redmine.production访问生产,您将最终与开发环境进行交互.但是,如果您首先启动生产应用程序,然后尝试访问redmine.development,您将最终与生产进行交互.

答案是为您要运行的每个环境对应用程序的目录进行符号链接. Passenger只查看root的文字路径 – 如果它与当前运行的实例不匹配,它将生成一个新的实例.

前).

物理根是〜/ rails_apps / myserver(其中myserver包含app,public等)

创建一个名为〜/ rails_apps / dev.myserver的符号链接到〜/ rails_apps / myserver,另一个名为〜/ rails_apps / pro.myserver的符号链接到〜/ rails_apps / myserver.

现在在Nginx配置中,将符号链接位置以root身份用于公用文件夹.

例如,如果symlink /home/user/rails_apps/[dev|pro].redmine指向/ home / user / rails_apps / redmine)

server {
    listen xxxx;
    server_name redmine.development;
    root /home/user/rails_apps/dev.redmine/public;
    passenger_enabled on;
    rails_env development;
}
server {
    listen xxxx;
    server_name redmine.production;
    root /home/user/rails_apps/pro.redmine/public;
    passenger_enabled on;
    rails_env production;
}

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...