ruby-on-rails - 如何在 nginx、passenger 和 redmine 中使用不同的 rails_env

标签 ruby-on-rails nginx redmine passenger

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

一个虚拟主机的示例:

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 乘客一起使用?

谢谢

最佳答案

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

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

答案是为您要运行的每个环境符号链接(symbolic link)您的应用程序目录。乘客只查看到 root 的文字路径 - 如果它与当前正在运行的实例不匹配,它将产生一个新实例。

前任。)

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

创建一个名为 ~/rails_apps/dev.myserver 的符号链接(symbolic link)至~/rails_apps/myserver另一个叫 ~/rails_apps/pro.myserver~/rails_apps/myserver .

现在在您的 nginx 配置中,以 root 身份使用指向公共(public)文件夹的符号链接(symbolic link)位置。

例如,如果符号链接(symbolic link)/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;
}

关于ruby-on-rails - 如何在 nginx、passenger 和 redmine 中使用不同的 rails_env,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5092225/

相关文章:

nginx - 带有 nginx 代理的 Gitlab 8 无法下载 zip,将公共(public)仓库克隆为访客,也无法在 CI 中构建

node.js - 使用 nginx 和 Node 获取 ip 用户

ruby-on-rails - 在 Centos 上安装 Redmine

ruby-on-rails - 无法使用渲染:text with a proc in Rails 4

ruby-on-rails - 制作 Rails 应用程序多语言的最佳实践

PHP:非阻塞shell_exec WITH命令输出

html - 使用 Textile 的表格单元格中的有序列表

ruby - Redmine通过SSL连接SVN

mysql - 使用 order 子句更新许多记录

javascript - Rails javascript 按钮导致发布