我需要与Nginx,phusion乘客和MysqL结合运行redmine。 由于该项目需要redmine的几个实例,这应该使用不同的rails_env来实现,我试图用Nginx将它们设置在不同的服务器虚拟主机中。
一个虚拟主机的例子:
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中的一个,而不是每个都使用一个。 任何build议如何使用不同的rails_env与相同的应用程序,Nginx和phusion乘客?
Phusion乘客错误:http.Server.listen()被多次调用
Rails / Passenger / Node.js:ExecJS“找不到JavaScript运行时”
Redmine 2.3,ruby 2.0.0,Nginx 1.4.1与乘客4.0.2所有HTTP POST失败
乘客Nginx模块服务名称注册在Ubuntu 12.04.2 lts
用OS X上的Phusion Passenger + Sinatra + Nginx修复权限错误
谢谢
Passenger + Nginx + Node(Meteor)100%的cpu使用率
用Bundler安装Gems ==大问题
Apache对POST请求大小的限制
乘客进程已经运行? 但不是
无法派生应用程序
我觉得你有和我一样的问题。 您希望使用相同的物理目录来托管应用程序实例,但是您希望通过使用不同的DNS条目(redmine.development / redmine.production)在不同的环境(开发/生产)下与应用程序进行交互。
问题在于,乘客将传入的请求识别为使用根目录上目录中找到的rails应用程序。 如果您在多个Nginx配置中对root使用相同的文字参考,则乘客会将请求转发到在root中找到的单个正在运行的实例。 即,如果您首先启动开发应用程序,然后尝试通过redmine.production访问生产,那么您将最终与开发环境进行交互。 但是,如果您先启动生产应用程序,然后尝试访问redmine.development,则最终将与生产进行交互。
答案就是将你应用程序的目录符号链接到你想要运行的每个环境。 Passenger只查看root的文字路径 – 如果它不匹配当前正在运行的实例,它会产生一个新的。
前)。
物理根是~/rails_apps/myserver (其中myserver包含应用程序,公共等)
创建一个名为~/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; }
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 }