加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:28:45 所属栏目:百科 来源:网络整理
导读:我需要让redmine与nginx,phusion乘客和 mysql一起运行.由于该项目需要多个redmine实例,应该使用不同的rails_env来实现,我尝试使用nginx在不同的服务器vhosts中设置它们. 一个vhost的示例: server { listen xxxx; server_name redmine.xxxxx; root /xxxxx/re
我需要让redmine与nginx,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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读