rails开发应用程序不能在不同平台上使用nginx proxy_pass一致地提供JS

时间:2018-04-25 10:46:00

标签: jquery ruby-on-rails macos nginx zurb-foundation

我会尽量简短地说明我到达这里的情况,但它已经过了大约3天的旅程。

多年来,#34; Demo"在我的网络上某处的应用程序供其他人查看并给我反馈。这最初是在我的笔记本电脑上,开发应用程序在某个高端口运行,我的路由器将该端口重定向到我的笔记本电脑。我在其他平台(MacMini,RaspberryPI,Linux)上安装了一些应用程序,并在该平台上安装了nginx proxy_pass端口80。上周我尝试简化我的流程并将所有演示放在MacMini上,这就是我遇到问题的一些应用程序没有工作,jQuery没有找到或加载到一些演示,通常是那些有Zurb基金会。

我无法弄清问题应该归咎于什么,我有五个候选人。

  • 我的nginx配置
  • Rails开发环境
  • 我的JS / CSS清单文件
  • 粉底
  • OSX spring / file_watcher问题

为了记录这一点,我在三个平台上运行了一个应用程序(来自git pull的相同代码,相当数量的JS和一些基本的基础)。 MacMini正在运行10.13.4(高山脉,但我在过去几天里经历了10.12.2和10.12.6)。 MacBook Air运行10.12.6。在MacMini上的VirtualBox中运行的Rasberrian OS(Debian 9)。 [foundation-rails(6.4.3.0),rails(5.1.6),jquery-rails(4.3.3)]

除了server_name和端口号之外,所有三个基本nginx配置都相同。我尝试了各种调整,但没有解决我的问题。

server {
  server_name bingo2.mydomain.us;

  location / {
    proxy_redirect     off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://10.0.1.104:8604/;
  }
}

我的JS / CSS清单文件目前在下面。我试图确保为供应商设置了正确的订单和选项。对于CSS文件,我取出了require foundation_and_overides条目,因为它在树中并没有任何效果,认为它是从旧版本的基础版本中遗留下来的。

// This is a JS manifest file that'll be compiled into application.js, which will include all the files
// listed below.

//
//= require rails-ujs
//= require jquery
//= require foundation
//= require_tree .

$(document).foundation();

/*
 * This is a css manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 *= require_self
 *= require foundation_and_overrides
 *= require_tree .

 */

我最初让这些应用程序在普通开发环境中运行,但发现了一个潜在的错误(https://github.com/rails/rails/issues/26158),表明OSX文件系统存在问题。解决方法是删除file_watcher,以便创建一个' demo'环境,这只是一个开发环境,文件观察者gems和配置被删除。

我使用rails s -p 8604 -e demo -b 0.0.0.0 -d启动应用程序,然后使用bingo{1,2}.mydomain.us.

点击应用程序

结果是两台Mac都因Web控制台错误而失败

 [Error] Failed to load resource: The network connection was lost. (foundation_and_overrides.self-d1f959e72f9d5d6603cd707629d1e6b8df8a5731363c48252b8b10028591a11a.css, line 0)
 [Error] ReferenceError: Can't find variable: jQuery
  (anonymous function) (foundation.core.self-f3c7f9657e3fa857b22c08af6fe5c52df6f2ad4f5b85268319d47c1be483353d.js:74)
  __webpack_require__ (foundation.core.self-f3c7f9657e3fa857b22c08af6fe5c52df6f2ad4f5b85268319d47c1be483353d.js:21)
  ...

如果我将nginx从等式中取出并直接命中本地端口(10.0.1.104:8604),则所有平台都可以正常工作。 (但你曾经问过任何一点技术经验,没有任何技术经验可以使用端口#!来查看网站上的内容,它会让他们感到困惑,更不用说他们想把www放在网址中了)

当然OSX似乎是主要问题,但只能使用proxy_pass。

任何人有任何想法或在我的设置中看到缺少的东西?我想我可以设置暂存环境并部署应用程序,但是对于我想要做的事情来说,简单的git push和pull似乎更容易。

关于nginx不服务JS的大多数类似问题仍未得到答复,或者纠正了一个简单的错误。

1 个答案:

答案 0 :(得分:0)

经过几天没有回应,我挖了一点,找到了可行的东西。

Zurb基金会一直存在问题。很久以前我放弃了涡轮增压链路。它只是不能很好地发挥它,但除了所需的清除文件中的所有内容,我得到一个javascript错误说它找不到基础的东西。在查看$(document).ready$(window).load之后,我将javascript清单更改为:

//= require rails-ujs
//= require jquery
//= require foundation
//= require_tree .

$(window).load(function() {
    //Fires when the page is loaded completely
    $(document).foundation();
});

我打算在打电话时没有加载所有内容。 `$(document).ready刚刚没有做到这一点。

这仍然无法回答为什么它适用于Linux而不适用于MacOSX。

修改

除了使用chrome导致错误!

net::ERR_CONTENT_LENGTH_MISMATCH

我将proxy_buffering off;添加到nginx位置。