使用 nginx、passenger、ruby on Rails 的网络请求中的重复路径

问题描述 投票:0回答:1

我有一个相当旧的 Rails 应用程序,我需要让它在 Docker 化环境中运行。我以前从未使用过 ruby 或 Rails,所以我显然不知道事情是如何工作的。

rails 应用程序在乘客中运行,并以 nginx 为前端。我可以让应用程序在根 url 上正常工作,例如http://localhost/,但需要在http://localhost/my-app/view下运行。

我已根据 docs 将乘客配置添加到 nginx。大多数事情都可以正常工作,除了一种表单之外,该表单有一个控制器,无需 sub-dir 乘客配置即可正常工作,但是当我添加新配置并提交表单时,我发现我的

passenger_base_uri
在网络请求中出现了两次例如

http://localhost/my-app/view/my-app/view/explore/new?search=&area=458579%2C305178

所以我可以看到 URL 中的重复项,如果我将该 URL 复制为curl 命令并删除重复的路径,那么它再次按预期工作。

查看此站点的 nginx 配置

    location ~ ^/my-app/view(/.*|$) {
        alias /var/www/html/code/public$1;

        passenger_base_uri /my-app/view;
        passenger_app_root /var/www/html/code;
        passenger_document_root /var/www/html/code/public;
        passenger_enabled on;
    }

这正是我上面链接的乘客文档中的内容。

表单模板为:

  .col-md-6.col-sm-12
    =form_tag( {controller: :explore, action: :new}, {method: :get, enforce_utf8: false} ) do
      %fieldset
        .form-group
          %label{ for: "search_search" }
            Sampling point name or ID
          %input#search.form-control{ name: "search", id: "search", value: @exploration.user_search[:search], class: "c-constraint" }
  
        .form-group
          %label{ for: "area" }
            Area
          %select.form-control{ name: "area", id: "area-selections", class: "c-constraint" }
            %option{ value: nil, label: "areas"}
            - Areas.new.each do |area|
              %option{ value: area.id, selected: @exploration.user_search.area_selected?( area.id ) }
                = area.label
  
        =submit_tag( "Find sampling points", name: nil, class: "btn btn-lg action-button c-action-submit u-margin-1-vertical" )

任何想法、想法将不胜感激。

我尝试过到处调整配置,但没有与乘客打交道的经验,我不确定要尝试什么。我还尝试将

namespaces
引入 Rails 应用程序,但同样,由于我缺乏经验,我可能做错了,我在日志中遇到了无法破译的错误。

ruby-on-rails nginx passenger
1个回答
0
投票

我已设法解决此问题,但忘记回复。

这是一个奇怪的现象,我无法完全理解为什么会发生这种情况。

我被锁定到 Rails v5.2.0。

事实证明,这是乘客应用程序容器的 nginx 配置,并撤消了 production.rb 文件中错误的

config.assets.compile = true
行。

一旦我将

config.assets.compile = false
重置为应有的样子,我就在 nginx 配置中注释掉了
alias
行。关闭此功能,使表单按预期提交,但没有资产,如果我重新打开
alias
,我得到了资产,但表单再次提交错误。

我将 nginx 配置改回原来的配置:

    location /my-app/view/ {
        passenger_base_uri /my-app/view;
        passenger_app_root /var/www/html/code;
        passenger_document_root /var/www/html/code/public;
        alias /var/www/html/code/public/;
        passenger_enabled on;
    }

它又神奇地开始工作了。

我同时进行了一些编辑,然后就开始工作了。我没有时间回去分析每个不同的设置,在这之后还有 25 个其他问题需要解决,所以就继续前进。

© www.soinside.com 2019 - 2024. All rights reserved.