jquery - 在不同平台上,rails 开发应用程序无法与 nginx proxy_pass 一致地为 JS 提供服务
问题描述
我会尽量简短地说明我是如何到达这里的,但这大约是 3 天的旅程。
多年来,我在网络上的某个地方放置了“演示”应用程序,供其他人查看并给我反馈。这最初是在我的笔记本电脑上,开发应用程序在某个高端口上运行,我的路由器将该端口重定向到我的笔记本电脑。我在其他平台(MacMini、RaspberryPI、Linux)上安装了一些应用程序,并让 nginx proxy_pass 端口 80 到该平台。上周我试图简化我的流程并将所有 Demo 放在 MacMini 上,这就是我遇到了一些应用程序无法在某些演示中找到或加载 jQuery 的问题,通常是具有 Zurb Foundation 的那些。
我不知道是什么导致了这个问题,我有五个候选人。
- 我的 nginx 配置
- Rails 开发环境
- 我的 JS/CSS 清单文件
- 基础
- OSX spring/file_watcher 问题
为了记录这一点,我在三个平台上运行了一个应用程序(来自 git pull 的相同代码、相当数量的 JS 和一点基础 Foundation)。MacMini 运行的是 10.13.4(高山脉,但最近几天我经历了 10.12.2 和 10.12.6)。运行 10.12.6 的 MacBook Air。在 MacMini 上的 VirtualBox 中运行的 Rasberrian OS (Debian 9)。[基础-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,所以我创建了一个“演示”环境,它只是一个开发环境,删除了文件观察程序 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 放在 url 中)
当然 OSX 似乎是主要问题,但仅限于 proxy_pass。
任何人有任何想法或看到我的设置中缺少的东西?我想我可以设置临时环境并部署应用程序,但是对于我想做的事情来说,简单的 git push 和 pull 似乎要容易得多。
大多数关于 nginx 不服务 JS 的类似问题仍未得到解答,或者一个简单的错误正在得到纠正。
解决方案
几天没有回应后,我又挖了一点,发现了一些有用的东西。
Zurb 基金会一直存在问题。我很久以前就放弃了涡轮链接。它只是不能很好地使用它,但是除了需要的东西之外,去掉清单文件中的所有内容,我遇到了一个 javascript 错误,说它找不到基础的东西。查看$(document).ready
vs之后$(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 位置。
推荐阅读
- android - deviceNotReady 错误:“注册失败”react-native-twilio-programmable-voice
- javascript - cors 启用 axios 获取请求失败
- r - 如何根据小标题中的标准过滤数据框?
- .net-core - 如何停止从一页到另一页的剃刀部分持久状态消息
- html - 具有跨度的响应式 CSS 网格
- python - 将数据从一个数据帧复制到另一个数据帧并根据值替换数据
- python - AWS:无法导入模块“处理程序”:没有名为“numpy”的模块
- jquery - 限制 jQuery 仅附加到一个元素
- java - 奇怪的错误:未创建 Bean,“无法配置端点”
- c++ - 在文本文件中查找字谜