一个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乘客?
谢谢
解决方法
问题是乘客将传入的请求识别为使用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; }