2011-02-23 76 views
3

我需要与nginx,phusion乘客和mysql结合运行redmine。由于该项目需要多个redmine实例,这些实例应该使用不同的rails_env来实现,所以我尝试使用nginx将它们设置在不同的服务器虚拟主机中。如何使用不同的rails_env与nginx,乘客和redmine

一个虚拟主机的实施例:

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

也是一样的其他服务器虚拟主机,但有server_name是匹配到其他域和RAILS_ENV设置为内部。

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

谢谢

+0

正在使用的管理平台相同的根目录两个实例? – synecdoche 2012-04-30 02:04:58

+0

这似乎是一个错误nginx虚拟机制+乘客... – BrunoJCM 2012-07-05 17:25:37

回答

1

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

问题是,乘客将传入的请求识别为使用根目录上的目录中找到的rails应用程序。如果您在多个nginx配置中对root使用相同的字面参考,乘客会将请求转发到在root中找到的单个正在运行的实例。也就是说,如果您先启动开发应用程序,然后尝试通过redmine.production访问生产,那么您最终会与开发环境进行交互。但是,如果您先启动生产应用程序,然后尝试访问redmine.development,则最终会与生产进行交互。

答案是符号链接您的应用程序的目录要运行各种环境。 Passenger只查看根目录的文字路径 - 如果它与当前正在运行的实例不匹配,它将生成一个新的目录。

前。)

物理根为~/rails_apps/myserver(其中myserver中的应用程式,公众等)

创建一个名为~/rails_apps/dev.myserver符号链接~/rails_apps/myserver和另一个叫~/rails_apps/pro.myserver~/rails_apps/myserver

现在在您的nginx配置中,使用作为根用户的公共文件夹的符号链接位置。

前,如果符号链接/home/user/rails_apps/[dev|pro].redmine点到/ home /用户/ rails_apps /管理平台)

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; 
} 
+1

任何人查看这个答案,你最终会遇到问题资产冲突,因为使用多个环境。最好学习部署Capistrano。然而,这对OP的查询确实“解决了问题”。 – JakeTheSnake 2014-10-01 04:10:08

0

nginx的乘客犯规遵循符号链接.../app/public目录许多时间 ,因为它期望它是一个不是文件的目录
但是,您可以使用PASSENGER_APP_GROUP_NAME指令。
这样的: -

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

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